{"openapi":"3.0.0","info":{"version":"1.0.0","title":"Teable App","description":"Manage Data as easy as drink a cup of tea","x-logo":{"backgroundColor":"#F0F0F0","altText":"Teable logo"}},"servers":[{"url":"https://app.teable.ai/api"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{},"parameters":{}},"paths":{"/table/{tableId}/record/{recordId}":{"get":{"summary":"Get record","description":"Retrieve a single record by its ID with options to specify field projections and output format.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"},"required":false,"description":"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","name":"fieldKeyType","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"summary":"Update record","description":"Update a single record by its ID with support for field value typecast and record reordering.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"},"typecast":{"type":"boolean","description":"Automatic data conversion from cellValues if the typecast parameter is passed in. Automatic conversion is disabled by default to ensure data integrity, but it may be helpful for integrating with 3rd party data sources."},"record":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create record (will create a order index automatically)"},"anchorId":{"type":"string","description":"The record id to anchor to"},"position":{"type":"string","enum":["before","after"]}},"required":["viewId","anchorId","position"],"description":"Where this record to insert to (Optional)"}},"required":["record"],"description":"Update record by id"}}}},"responses":{"200":{"description":"Returns record data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"fieldKeyType\":\"id\",\"typecast\":true,\"record\":{\"fields\":{\"property1\":null,\"property2\":null}},\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"fieldKeyType\":\"id\",\"typecast\":true,\"record\":{\"fields\":{\"property1\":null,\"property2\":null}},\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  fieldKeyType: 'id',\n  typecast: true,\n  record: {fields: {property1: null, property2: null}},\n  order: {viewId: 'string', anchorId: 'string', position: 'before'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fieldKeyType\\\":\\\"id\\\",\\\"typecast\\\":true,\\\"record\\\":{\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null}},\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete record","description":"Permanently delete a single record by its ID.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record":{"get":{"summary":"List records","description":"Retrieve a list of records with support for filtering, sorting, grouping, and pagination. The response includes record data and optional group information.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"},"required":false,"description":"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","name":"fieldKeyType","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"List of records","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"example":[{"id":"recXXXXXXX","fields":{"single line text":"text value"}}],"description":"Array of record objects "},"extra":{"type":"object","properties":{"groupPoints":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]},"description":"Group points for the view"},"allGroupHeaderRefs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"depth":{"type":"number","maximum":2,"minimum":0}},"required":["id","depth"]},"description":"All group header refs for the view, including collapsed group headers"},"searchHitIndex":{"type":"array","nullable":true,"items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldId":{"type":"string"}},"required":["recordId","fieldId"]},"description":"The index of the records that match the search, highlight the records"}}}},"required":["records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/record?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"summary":"Create records","description":"Create one or multiple records with support for field value typecast and custom record ordering.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"},"typecast":{"type":"boolean","description":"Automatic data conversion from cellValues if the typecast parameter is passed in. Automatic conversion is disabled by default to ensure data integrity, but it may be helpful for integrating with 3rd party data sources."},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create record (will create a order index automatically)"},"anchorId":{"type":"string","description":"The record id to anchor to"},"position":{"type":"string","enum":["before","after"]}},"required":["viewId","anchorId","position"],"description":"Where this record to insert to (Optional)"},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"example":[{"fields":{"single line text":"text value"}}],"description":"Array of record objects "}},"required":["records"],"description":"Multiple Create records"}}}},"responses":{"201":{"description":"Returns data about the records.","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"example":[{"id":"recXXXXXXX","fields":{"single line text":"text value"}}],"description":"Array of record objects "}},"required":["records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"fieldKeyType\":\"id\",\"typecast\":true,\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"},\"records\":[{\"fields\":{\"single line text\":\"text value\"}}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"fieldKeyType\":\"id\",\"typecast\":true,\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"},\"records\":[{\"fields\":{\"single line text\":\"text value\"}}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  fieldKeyType: 'id',\n  typecast: true,\n  order: {viewId: 'string', anchorId: 'string', position: 'before'},\n  records: [{fields: {'single line text': 'text value'}}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fieldKeyType\\\":\\\"id\\\",\\\"typecast\\\":true,\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"},\\\"records\\\":[{\\\"fields\\\":{\\\"single line text\\\":\\\"text value\\\"}}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"summary":"Update multiple records","description":"Update multiple records in a single request with support for field value typecast and record reordering.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"},"typecast":{"type":"boolean","description":"Automatic data conversion from cellValues if the typecast parameter is passed in. Automatic conversion is disabled by default to ensure data integrity, but it may be helpful for integrating with 3rd party data sources."},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["id","fields"]}},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create record (will create a order index automatically)"},"anchorId":{"type":"string","description":"The record id to anchor to"},"position":{"type":"string","enum":["before","after"]}},"required":["viewId","anchorId","position"],"description":"Where this record to insert to (Optional)"}},"required":["records"],"description":"Multiple Update records"}}}},"responses":{"200":{"description":"Returns the records data after update.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"fieldKeyType\":\"id\",\"typecast\":true,\"records\":[{\"id\":\"string\",\"fields\":{\"property1\":null,\"property2\":null}}],\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"fieldKeyType\":\"id\",\"typecast\":true,\"records\":[{\"id\":\"string\",\"fields\":{\"property1\":null,\"property2\":null}}],\"order\":{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  fieldKeyType: 'id',\n  typecast: true,\n  records: [{id: 'string', fields: {property1: null, property2: null}}],\n  order: {viewId: 'string', anchorId: 'string', position: 'before'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fieldKeyType\\\":\\\"id\\\",\\\"typecast\\\":true,\\\"records\\\":[{\\\"id\\\":\\\"string\\\",\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}],\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/record\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete records","description":"Permanently delete multiple records by their IDs in a single request.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"recordIds","in":"query"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/record?recordIds=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record?recordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record?recordIds=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/record?recordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/duplicate":{"post":{"summary":"Duplicate record","description":"Create a copy of an existing record with optional custom positioning in the view.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create record (will create a order index automatically)"},"anchorId":{"type":"string","description":"The record id to anchor to"},"position":{"type":"string","enum":["before","after"]}},"required":["viewId","anchorId","position"],"description":"Where this record to insert to (Optional)"}}}},"responses":{"201":{"description":"Successful duplicate","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"example":[{"id":"recXXXXXXX","fields":{"single line text":"text value"}}],"description":"Array of record objects "}},"required":["records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/duplicate';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"viewId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({viewId: 'string', anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/{trashId}":{"delete":{"description":"Permanently delete a trash item by trashId","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"trashId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/trash/%7BtrashId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/%7BtrashId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/trash/%7BtrashId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/trash/%7BtrashId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space":{"post":{"description":"Create a space","tags":["space"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"201":{"description":"Returns information about a successfully created space.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get space list","description":"Get space list by query","tags":["space"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of space.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name","role"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}":{"delete":{"description":"Delete a space by spaceId","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a space by spaceId","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns information about a space.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","name","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a space info","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"200":{"description":"Returns information about a successfully updated space.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/invitation/link":{"get":{"description":"List a invitation link to your","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful response, return invitation information list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"}},"required":["invitationId","role","inviteUrl","invitationCode","createdBy","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/invitation/link',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/invitation/link\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a invitation link to your","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"201":{"description":"Successful response, return the ID of the invitation link.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"}},"required":["invitationId","role","inviteUrl","invitationCode","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"role\":\"owner\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/invitation/link',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/invitation/link\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/invitation/link/{invitationId}":{"delete":{"description":"Delete a invitation link to your","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a invitation link to your","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["invitationId","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"role\":\"owner\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/invitation/link/%7BinvitationId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/invitation/email":{"post":{"description":"Send invitations by e-mail","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"},"minItems":1},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["emails","role"]}}}},"responses":{"201":{"description":"Successful response, return invitation information.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"invitationId":{"type":"string"}},"required":["invitationId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/invitation/email \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"emails\":[\"user@example.com\"],\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/invitation/email';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"emails\":[\"user@example.com\"],\"role\":\"owner\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/invitation/email',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({emails: ['user@example.com'], role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"emails\\\":[\\\"user@example.com\\\"],\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/invitation/email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/collaborators":{"get":{"description":"List a space collaborator","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeBase","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"string","enum":["desc","asc"]},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"Successful response, return space collaborator list.","content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"avatar":{"type":"string","nullable":true},"createdTime":{"type":"string"},"type":{"type":"string","enum":["user"]},"resourceType":{"type":"string","enum":["space","base"]},"isSystem":{"type":"boolean"},"billable":{"type":"boolean"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["userId","userName","email","role","avatar","createdTime","type","resourceType"]},{"type":"object","properties":{"departmentId":{"type":"string"},"departmentName":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"createdTime":{"type":"string"},"type":{"type":"string","enum":["department"]},"resourceType":{"type":"string","enum":["space","base"]},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["departmentId","departmentName","role","createdTime","type","resourceType"]}]}},"uniqTotal":{"type":"number"},"total":{"type":"number"}},"required":["collaborators","uniqTotal","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&includeBase=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&includeBase=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&includeBase=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&includeBase=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a collaborator","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"principalId","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":true,"name":"principalType","in":"query"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a space collaborator","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["principalId","principalType","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/collaborators \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"owner\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/collaborators',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({principalId: 'string', principalType: 'user', role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\",\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/collaborators\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base":{"post":{"description":"Create a base","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["spaceId"]}}}},"responses":{"201":{"description":"Returns information about a successfully created base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"spaceId\":\"string\",\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"spaceId\":\"string\",\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}":{"delete":{"description":"Delete a base by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a base by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns information about a base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a base info","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string"}}}}}},"responses":{"200":{"description":"Returns information about a successfully updated base.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true,"format":"emoji"}},"required":["spaceId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/order":{"put":{"description":"Update view order","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/order \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/order';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/order',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/order":{"put":{"description":"Update base order","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/order \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/order';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/order',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/access/all":{"get":{"description":"Get base list by query","tags":["base"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of base.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/access/all \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/access/all';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/access/all',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/access/all\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/collaborators":{"get":{"description":"List a base collaborator","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":false,"name":"role","in":"query"}],"responses":{"200":{"description":"Successful response, return base collaborator list.","content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"avatar":{"type":"string","nullable":true},"createdTime":{"type":"string"},"type":{"type":"string","enum":["user"]},"resourceType":{"type":"string","enum":["space","base"]},"isSystem":{"type":"boolean"},"billable":{"type":"boolean"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["userId","userName","email","role","avatar","createdTime","type","resourceType"]},{"type":"object","properties":{"departmentId":{"type":"string"},"departmentName":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"createdTime":{"type":"string"},"type":{"type":"string","enum":["department"]},"resourceType":{"type":"string","enum":["space","base"]},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["departmentId","departmentName","role","createdTime","type","resourceType"]}]}},"total":{"type":"number"}},"required":["collaborators","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a base collaborators","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"principalId","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":true,"name":"principalType","in":"query"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a base collaborator","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["principalId","principalType","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/collaborators \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"creator\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/collaborators',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({principalId: 'string', principalType: 'user', role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\",\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/collaborators\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/duplicate":{"post":{"description":"duplicate a base","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fromBaseId":{"type":"string","description":"The base to duplicate"},"spaceId":{"type":"string","description":"The space to duplicate the base to"},"withRecords":{"type":"boolean","description":"Whether to duplicate the records"},"name":{"type":"string","description":"The name of the duplicated base"},"baseId":{"type":"string"},"nodes":{"type":"array","items":{"type":"string"},"description":"The node IDs to include in the duplication"},"shareId":{"type":"string","description":"The share ID when duplicating from a shared base. If provided, will use share permissions instead of base|update permission."}},"required":["fromBaseId","spaceId"]}}}},"responses":{"201":{"description":"Returns information about a successfully duplicated base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"fromBaseId\":\"string\",\"spaceId\":\"string\",\"withRecords\":true,\"name\":\"string\",\"baseId\":\"string\",\"nodes\":[\"string\"],\"shareId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/duplicate';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"fromBaseId\":\"string\",\"spaceId\":\"string\",\"withRecords\":true,\"name\":\"string\",\"baseId\":\"string\",\"nodes\":[\"string\"],\"shareId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  fromBaseId: 'string',\n  spaceId: 'string',\n  withRecords: true,\n  name: 'string',\n  baseId: 'string',\n  nodes: ['string'],\n  shareId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fromBaseId\\\":\\\"string\\\",\\\"spaceId\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"name\\\":\\\"string\\\",\\\"baseId\\\":\\\"string\\\",\\\"nodes\\\":[\\\"string\\\"],\\\"shareId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/create-from-template":{"post":{"summary":"Create a base from template or apply a template to a base","description":"Create a base from template or apply a template to a base","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The space id to create a base from"},"templateId":{"type":"string","description":"The template id to create a base from"},"withRecords":{"type":"boolean","description":"Whether to create records from the template"},"baseId":{"type":"string","description":"The base id to apply the template to"}},"required":["spaceId","templateId"]}}}},"responses":{"201":{"description":"Returns information about a successfully created base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"defaultUrl":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/create-from-template \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"spaceId\":\"string\",\"templateId\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/create-from-template';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"spaceId\":\"string\",\"templateId\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/create-from-template',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', templateId: 'string', withRecords: true, baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"templateId\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/create-from-template\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/permission":{"get":{"description":"Get a base permission","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about a base permission.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/permission \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/permission';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/permission',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/permission\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/invitation/link":{"get":{"description":"List a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response, return invitation information list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"invitationId":{"type":"string"},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","inviteUrl","invitationCode","createdBy","createdTime","role"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/invitation/link',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/invitation/link\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"201":{"description":"Successful response, return the ID of the invitation link.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","inviteUrl","invitationCode","createdBy","createdTime","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"role\":\"creator\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/invitation/link',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/invitation/link\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/invitation/link/{invitationId}":{"delete":{"description":"Delete a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"role\":\"creator\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/invitation/email":{"post":{"description":"Send invitations by e-mail","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"},"minItems":1},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["emails","role"]}}}},"responses":{"201":{"description":"Successful response, return invitation information.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"invitationId":{"type":"string"}},"required":["invitationId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/email \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"emails\":[\"user@example.com\"],\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/email';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"emails\":[\"user@example.com\"],\"role\":\"creator\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/invitation/email',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({emails: ['user@example.com'], role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"emails\\\":[\\\"user@example.com\\\"],\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/invitation/email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/shared-base":{"get":{"tags":["base"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns information about a shared base.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"},"spaceName":{"type":"string"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/shared-base \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/shared-base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/shared-base',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/shared-base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/permanent":{"delete":{"description":"Permanently delete a base by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/permanent \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/permanent',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/collaborator":{"post":{"description":"Add a collaborator to a space","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]}},"required":["principalId","principalType"]}},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["collaborators","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/collaborator \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborator';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"owner\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/collaborator',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({collaborators: [{principalId: 'string', principalType: 'user'}], role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"collaborators\\\":[{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\"}],\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/collaborator\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/collaborator":{"post":{"description":"Add a collaborator to a base","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]}},"required":["principalId","principalType"]}},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["collaborators","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/collaborator \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborator';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"creator\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/collaborator',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  collaborators: [{principalId: 'string', principalType: 'user'}],\n  role: 'creator'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"collaborators\\\":[{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\"}],\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/collaborator\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/collaborators/users":{"get":{"summary":"Get base collaborator user list","description":"Get base collaborator user list","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"string","enum":["desc","asc"]},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"Successful response, return base collaborator user list.","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard":{"get":{"description":"Get a list of dashboards in base","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboards.","content":{"application/json":{"schema":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a new dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Returns data about the created dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}":{"get":{"description":"Get a dashboard by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}},"pluginMap":{"type":"object","additionalProperties":{"type":"object","properties":{"id":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["id","pluginInstallId","name"]}}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a dashboard by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Dashboard deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/rename":{"patch":{"description":"Rename a dashboard by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Returns data about the renamed dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/layout":{"patch":{"description":"Update a dashboard layout by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["layout"]}}}},"responses":{"200":{"description":"Returns data about the updated dashboard layout.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["id","layout"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({layout: [{pluginInstallId: 'string', x: 0, y: 0, w: 0, h: 0}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"layout\\\":[{\\\"pluginInstallId\\\":\\\"string\\\",\\\"x\\\":0,\\\"y\\\":0,\\\"w\\\":0,\\\"h\\\":0}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/plugin":{"post":{"description":"Install a plugin to a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["name","pluginId"]}}}},"responses":{"201":{"description":"Returns data about the installed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"}},"required":["id","pluginId","pluginInstallId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}":{"delete":{"description":"Remove a plugin from a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin removed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a dashboard install plugin by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboard install plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin in a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Returns data about the renamed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"}},"required":["id","pluginInstallId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}/update-storage":{"patch":{"description":"Update storage of a plugin in a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Returns data about the updated plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"dashboardId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["baseId","dashboardId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/duplicate":{"post":{"description":"Duplicate a dashboard","summary":"Duplicate a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated dashboard info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/plugin/{installedId}/duplicate":{"post":{"description":"Duplicate a dashboard installed plugin","summary":"Duplicate a dashboard installed plugin","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated dashboard info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin":{"post":{"description":"Create a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":20},"description":{"type":"string","maxLength":150},"detailDesc":{"type":"string","maxLength":3000},"logo":{"type":"string"},"url":{"type":"string","format":"uri"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"helpUrl":{"type":"string","format":"uri"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]},"minItems":1},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"autoCreateMember":{"type":"boolean"}},"required":["name","logo","positions"]}}}},"responses":{"201":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"url":{"type":"string"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"secret":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/plugin \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"logo\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}},\"autoCreateMember\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"logo\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}},\"autoCreateMember\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  detailDesc: 'string',\n  logo: 'string',\n  url: 'http://example.com',\n  config: {\n    contextMenu: {width: 0, height: 0, x: 0, y: 0, frozenResize: true, frozenDrag: true},\n    view: null,\n    dashboard: null,\n    panel: null\n  },\n  helpUrl: 'http://example.com',\n  positions: ['dashboard'],\n  i18n: {\n    en: {title: 'Plugin title', description: 'Plugin description'},\n    zh: {title: '插件标题', description: '插件描述'}\n  },\n  autoCreateMember: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"detailDesc\\\":\\\"string\\\",\\\"logo\\\":\\\"string\\\",\\\"url\\\":\\\"http://example.com\\\",\\\"config\\\":{\\\"contextMenu\\\":{\\\"width\\\":0,\\\"height\\\":0,\\\"x\\\":0,\\\"y\\\":0,\\\"frozenResize\\\":true,\\\"frozenDrag\\\":true},\\\"view\\\":null,\\\"dashboard\\\":null,\\\"panel\\\":null},\\\"helpUrl\\\":\\\"http://example.com\\\",\\\"positions\\\":[\\\"dashboard\\\"],\\\"i18n\\\":{\\\"en\\\":{\\\"title\\\":\\\"Plugin title\\\",\\\"description\\\":\\\"Plugin description\\\"},\\\"zh\\\":{\\\"title\\\":\\\"插件标题\\\",\\\"description\\\":\\\"插件描述\\\"}},\\\"autoCreateMember\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get plugins","tags":["plugin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns data about the plugins.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"url":{"type":"string"},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","i18n","status","createdTime","lastModifiedTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/plugin \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{id}":{"delete":{"description":"Delete a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns no content."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/plugin/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/plugin/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","maxLength":150},"detailDesc":{"type":"string","maxLength":3000},"url":{"type":"string","format":"uri"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"logo":{"type":"string"},"helpUrl":{"type":"string","format":"uri"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]},"minItems":1},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}}},"required":["name","positions"]}}}},"responses":{"200":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"url":{"type":"string"},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"secret":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime","lastModifiedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/plugin/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"logo\":\"string\",\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"logo\":\"string\",\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  detailDesc: 'string',\n  url: 'http://example.com',\n  config: {\n    contextMenu: {width: 0, height: 0, x: 0, y: 0, frozenResize: true, frozenDrag: true},\n    view: null,\n    dashboard: null,\n    panel: null\n  },\n  logo: 'string',\n  helpUrl: 'http://example.com',\n  positions: ['dashboard'],\n  i18n: {\n    en: {title: 'Plugin title', description: 'Plugin description'},\n    zh: {title: '插件标题', description: '插件描述'}\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"detailDesc\\\":\\\"string\\\",\\\"url\\\":\\\"http://example.com\\\",\\\"config\\\":{\\\"contextMenu\\\":{\\\"width\\\":0,\\\"height\\\":0,\\\"x\\\":0,\\\"y\\\":0,\\\"frozenResize\\\":true,\\\"frozenDrag\\\":true},\\\"view\\\":null,\\\"dashboard\\\":null,\\\"panel\\\":null},\\\"logo\\\":\\\"string\\\",\\\"helpUrl\\\":\\\"http://example.com\\\",\\\"positions\\\":[\\\"dashboard\\\"],\\\"i18n\\\":{\\\"en\\\":{\\\"title\\\":\\\"Plugin title\\\",\\\"description\\\":\\\"Plugin description\\\"},\\\"zh\\\":{\\\"title\\\":\\\"插件标题\\\",\\\"description\\\":\\\"插件描述\\\"}}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/plugin/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{id}/regenerate-secret":{"post":{"description":"Regenerate a plugin secret","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"201":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"}},"required":["id","secret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/plugin/%7Bid%7D/regenerate-secret \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D/regenerate-secret';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/%7Bid%7D/regenerate-secret',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/plugin/%7Bid%7D/regenerate-secret\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}":{"get":{"description":"Get a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"url":{"type":"string"},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"secret":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime","lastModifiedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/plugin/%7BpluginId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/%7BpluginId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/%7BpluginId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/center/list":{"get":{"description":"Get a list of plugins center","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"ids","in":"query"},{"schema":{"type":"string"},"required":false,"name":"positions","in":"query"}],"responses":{"200":{"description":"Returns data about the plugin center list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"helpUrl":{"type":"string"},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"url":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"required":["id","name","logo","status","createdTime","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/submit":{"patch":{"description":"Submit a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin submitted successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/plugin/%7BpluginId%7D/submit \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/submit';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/%7BpluginId%7D/submit',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/plugin/%7BpluginId%7D/submit\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/token":{"get":{"description":"Get a token","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"secret":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"authCode":{"type":"string"}},"required":["baseId","secret","scopes","authCode"]}}}},"responses":{"200":{"description":"Returns token.","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expiresIn":{"type":"number"},"refreshExpiresIn":{"type":"number"}},"required":["accessToken","refreshToken","scopes","expiresIn","refreshExpiresIn"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/plugin/%7BpluginId%7D/token \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"baseId\":\"string\",\"secret\":\"string\",\"scopes\":[\"string\"],\"authCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/token';\nconst options = {\n  method: 'GET',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"baseId\":\"string\",\"secret\":\"string\",\"scopes\":[\"string\"],\"authCode\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/%7BpluginId%7D/token',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({baseId: 'string', secret: 'string', scopes: ['string'], authCode: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\",\\\"secret\\\":\\\"string\\\",\\\"scopes\\\":[\\\"string\\\"],\\\"authCode\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"GET\", \"/api/plugin/%7BpluginId%7D/token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/refreshToken":{"post":{"description":"Refresh a token","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"refreshToken":{"type":"string"},"secret":{"type":"string"}},"required":["refreshToken","secret"]}}}},"responses":{"201":{"description":"Returns token.","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expiresIn":{"type":"number"},"refreshExpiresIn":{"type":"number"}},"required":["accessToken","refreshToken","scopes","expiresIn","refreshExpiresIn"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/plugin/%7BpluginId%7D/refreshToken \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"refreshToken\":\"string\",\"secret\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/refreshToken';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"refreshToken\":\"string\",\"secret\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/%7BpluginId%7D/refreshToken',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({refreshToken: 'string', secret: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"refreshToken\\\":\\\"string\\\",\\\"secret\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/plugin/%7BpluginId%7D/refreshToken\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/authCode":{"post":{"description":"Get an auth code","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"}},"required":["baseId"]}}}},"responses":{"201":{"description":"Returns auth code.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/plugin/%7BpluginId%7D/authCode \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/authCode';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"baseId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/%7BpluginId%7D/authCode',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/plugin/%7BpluginId%7D/authCode\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/unpublish":{"patch":{"tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin unpublished successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/plugin/%7BpluginId%7D/unpublish \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/unpublish';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/%7BpluginId%7D/unpublish',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/plugin/%7BpluginId%7D/unpublish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/chart/{pluginInstallId}/dashboard/{positionId}/query":{"get":{"description":"Get a dashboard install plugin query by id","tags":["plugin","chart","dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"positionId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"query"},{"schema":{"type":"string","enum":["json","text"]},"required":false,"name":"cellFormat","in":"query"}],"responses":{"200":{"description":"Returns data about the dashboard install plugin query.","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}}},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"column":{"type":"string"},"type":{"type":"string","enum":["aggregation","field"]},"fieldSource":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}},"required":["name","column","type"]}}},"required":["rows","columns"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/chart/{pluginInstallId}/plugin-panel/{positionId}/query":{"get":{"description":"Get a plugin panel install plugin query by id","tags":["plugin","chart","plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"positionId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"},{"schema":{"type":"string","enum":["json","text"]},"required":false,"name":"cellFormat","in":"query"}],"responses":{"200":{"description":"Returns data about the plugin panel install plugin query.","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}}},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"column":{"type":"string"},"type":{"type":"string","enum":["aggregation","field"]},"fieldSource":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}},"required":["name","column","type"]}}},"required":["rows","columns"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/export":{"get":{"description":"export a base by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","default":true},"required":false,"name":"includeData","in":"query"}],"responses":{"200":{"description":"export successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/create":{"post":{"description":"create a template","tags":["template"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"}}}}}},"responses":{"201":{"description":"Successfully create template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/template/create \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"category\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/create';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"category\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/create',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', category: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"category\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/template/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/notify/{token}":{"post":{"description":"Get Attachment information","tags":["attachments"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"},{"schema":{"type":"string"},"required":false,"name":"filename","in":"query"}],"responses":{"201":{"description":"Attachment information","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.teable.ai/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/{token}":{"get":{"description":"Upload attachment","tags":["attachments"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"},{"schema":{"type":"string","description":"File name for download"},"required":false,"description":"File name for download","name":"filename","in":"query"}],"responses":{"200":{"description":""}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/signature":{"post":{"description":"Retrieve upload signature.","tags":["attachments"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"contentType":{"type":"string","example":"image/png","description":"Mime type"},"contentLength":{"type":"number","example":123,"description":"File size"},"expiresIn":{"type":"number","example":3600,"description":"Token expire time, seconds"},"hash":{"type":"string","example":"xxxxxxxx","description":"File hash"},"type":{"type":"integer","enum":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"example":1,"description":"Type"},"baseId":{"type":"string"}},"required":["contentType","contentLength","type"]}}}},"responses":{"201":{"description":"return the upload URL and the key.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","example":"https://example.com/attachment/upload","description":"Upload url"},"uploadMethod":{"type":"string","example":"POST","description":"Upload method"},"token":{"type":"string","example":"xxxxxxxx","description":"Secret key"},"requestHeaders":{"type":"object","additionalProperties":{"nullable":true},"example":{"Content-Type":"image/png"}}},"required":["url","uploadMethod","token","requestHeaders"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/attachments/signature \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"contentType\":\"image/png\",\"contentLength\":123,\"expiresIn\":3600,\"hash\":\"xxxxxxxx\",\"type\":1,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/signature';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"contentType\":\"image/png\",\"contentLength\":123,\"expiresIn\":3600,\"hash\":\"xxxxxxxx\",\"type\":1,\"baseId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/attachments/signature',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  contentType: 'image/png',\n  contentLength: 123,\n  expiresIn: 3600,\n  hash: 'xxxxxxxx',\n  type: 1,\n  baseId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"contentType\\\":\\\"image/png\\\",\\\"contentLength\\\":123,\\\"expiresIn\\\":3600,\\\"hash\\\":\\\"xxxxxxxx\\\",\\\"type\\\":1,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/attachments/signature\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/upload/{token}":{"post":{"description":"Upload attachment","tags":["attachments"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"}],"requestBody":{"description":"upload attachment","required":true,"content":{"application/json":{"schema":{"type":"string","format":"binary"}}}},"responses":{"201":{"description":"Upload successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/attachments/upload/%7Btoken%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '\"string\"'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/upload/%7Btoken%7D';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '\"string\"'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/attachments/upload/%7Btoken%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify('string'));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"\\\"string\\\"\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/attachments/upload/%7Btoken%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}":{"patch":{"description":"update a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"cover":{"type":"object","nullable":true,"properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]}},"required":["token","size","url","path","mimetype","name","id"]},"isPublished":{"type":"boolean"},"featured":{"type":"boolean"},"isSystem":{"type":"boolean"},"baseId":{"type":"string"},"markdownDescription":{"type":"string"}}}}}},"responses":{"201":{"description":"Successfully update template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/template/%7BtemplateId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"categoryId\":[\"string\"],\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"isPublished\":true,\"featured\":true,\"isSystem\":true,\"baseId\":\"string\",\"markdownDescription\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"categoryId\":[\"string\"],\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"isPublished\":true,\"featured\":true,\"isSystem\":true,\"baseId\":\"string\",\"markdownDescription\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/%7BtemplateId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  categoryId: ['string'],\n  cover: {\n    token: 'xxxxxxxxxxx',\n    size: 1024,\n    url: '/bucket/xxxxx',\n    path: '/table/xxxxxx',\n    mimetype: 'video/mp4',\n    width: 100,\n    height: 100,\n    name: 'string',\n    id: 'string',\n    thumbnailPath: {lg: 'string', sm: 'string'}\n  },\n  isPublished: true,\n  featured: true,\n  isSystem: true,\n  baseId: 'string',\n  markdownDescription: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"categoryId\\\":[\\\"string\\\"],\\\"cover\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"name\\\":\\\"string\\\",\\\"id\\\":\\\"string\\\",\\\"thumbnailPath\\\":{\\\"lg\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\"}},\\\"isPublished\\\":true,\\\"featured\\\":true,\\\"isSystem\\\":true,\\\"baseId\\\":\\\"string\\\",\\\"markdownDescription\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully delete template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/template/%7BtemplateId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/%7BtemplateId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/template/%7BtemplateId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"get template detail by templateId","summary":"get template detail by templateId","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"boolean","nullable":true},"required":false,"name":"featured","in":"query"},{"schema":{"type":"string"},"required":false,"name":"categoryId","in":"query"}],"responses":{"201":{"description":"Successfully get template detail.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"isSystem":{"type":"boolean"},"featured":{"type":"boolean"},"isPublished":{"type":"boolean"},"snapshot":{"type":"object","properties":{"baseId":{"type":"string"},"snapshotTime":{"type":"string","format":"date-time"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["baseId","snapshotTime","spaceId","name"]},"description":{"type":"string"},"baseId":{"type":"string"},"cover":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]},"presignedUrl":{"type":"string"}},"required":["token","size","url","path","mimetype","name","id","presignedUrl"]},"usageCount":{"type":"number"},"markdownDescription":{"type":"string"},"publishInfo":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true},"defaultUrl":{"type":"string"}}},"visitCount":{"type":"number"},"createdBy":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["id","snapshot","cover","usageCount","visitCount","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template":{"get":{"description":"get template list","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"number","nullable":true,"default":0,"example":0,"description":"The templates count you want to skip"},"required":false,"description":"The templates count you want to skip","name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"default":300,"example":300,"description":"The templates count you want to take"},"required":false,"description":"The templates count you want to take","name":"take","in":"query"}],"responses":{"201":{"description":"Successfully get template list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"isSystem":{"type":"boolean"},"featured":{"type":"boolean"},"isPublished":{"type":"boolean"},"snapshot":{"type":"object","properties":{"baseId":{"type":"string"},"snapshotTime":{"type":"string","format":"date-time"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["baseId","snapshotTime","spaceId","name"]},"description":{"type":"string"},"baseId":{"type":"string"},"cover":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]},"presignedUrl":{"type":"string"}},"required":["token","size","url","path","mimetype","name","id","presignedUrl"]},"usageCount":{"type":"number"},"markdownDescription":{"type":"string"},"publishInfo":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true},"defaultUrl":{"type":"string"}}},"visitCount":{"type":"number"},"createdBy":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["id","snapshot","cover","usageCount","visitCount","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/template?skip=0&take=300' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template?skip=0&take=300';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template?skip=0&take=300',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template?skip=0&take=300\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/published":{"get":{"description":"get published template list","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","default":true,"example":true,"description":"Whether to get featured templates"},"required":false,"description":"Whether to get featured templates","name":"featured","in":"query"},{"schema":{"type":"string","nullable":true,"example":"tc_123","description":"The template category id"},"required":false,"description":"The template category id","name":"categoryId","in":"query"},{"schema":{"type":"number","nullable":true,"default":0,"example":0,"description":"The templates count you want to skip"},"required":false,"description":"The templates count you want to skip","name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"default":100,"example":100,"description":"The templates count you want to take"},"required":false,"description":"The templates count you want to take","name":"take","in":"query"},{"schema":{"type":"string","example":"template","description":"The search keyword for template name"},"required":false,"description":"The search keyword for template name","name":"search","in":"query"}],"responses":{"201":{"description":"Successfully get published template list."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/snapshot":{"post":{"description":"create a template snapshot","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully create template snapshot."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/template/%7BtemplateId%7D/snapshot \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/snapshot';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/%7BtemplateId%7D/snapshot',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/template/%7BtemplateId%7D/snapshot\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/create":{"post":{"description":"create a template category","tags":["template"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Successfully create template category."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/template/category/create \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/create';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/category/create',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/template/category/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/list":{"get":{"description":"get template category list","tags":["template"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully get template category list."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/template/category/list \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/category/list',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/category/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/{templateCategoryId}":{"delete":{"description":"delete a template category","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateCategoryId","in":"path"}],"responses":{"201":{"description":"Successfully delete template category."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/category/%7BtemplateCategoryId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/template/category/%7BtemplateCategoryId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"update a template category name","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateCategoryId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Successfully update template category name."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/category/%7BtemplateCategoryId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/template/category/%7BtemplateCategoryId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/{templateCategoryId}/order":{"put":{"description":"Update template category order","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateCategoryId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D/order \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D/order';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/category/%7BtemplateCategoryId%7D/order',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/template/category/%7BtemplateCategoryId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/pin-top":{"patch":{"description":"pin top a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully pin top a template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/template/%7BtemplateId%7D/pin-top \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/pin-top';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/%7BtemplateId%7D/pin-top',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D/pin-top\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/order":{"put":{"description":"Update template order","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/template/%7BtemplateId%7D/order \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/order';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/%7BtemplateId%7D/order',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/template/%7BtemplateId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/by-base/{baseId}":{"get":{"description":"get template by baseId","summary":"get template by baseId","tags":["template"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully get template.","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"isSystem":{"type":"boolean"},"featured":{"type":"boolean"},"isPublished":{"type":"boolean"},"snapshot":{"type":"object","properties":{"baseId":{"type":"string"},"snapshotTime":{"type":"string","format":"date-time"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["baseId","snapshotTime","spaceId","name"]},"description":{"type":"string"},"baseId":{"type":"string"},"cover":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]},"presignedUrl":{"type":"string"}},"required":["token","size","url","path","mimetype","name","id","presignedUrl"]},"usageCount":{"type":"number"},"markdownDescription":{"type":"string"},"publishInfo":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true},"defaultUrl":{"type":"string"}}},"visitCount":{"type":"number"},"createdBy":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["id","snapshot","cover","usageCount","visitCount","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/template/by-base/%7BbaseId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/by-base/%7BbaseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/by-base/%7BbaseId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/by-base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/unpublish/{templateId}":{"delete":{"description":"unpublish a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully unpublish template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/template/unpublish/%7BtemplateId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/unpublish/%7BtemplateId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/unpublish/%7BtemplateId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/template/unpublish/%7BtemplateId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/visit":{"patch":{"description":"Increment template visit count","summary":"Increment template visit count","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"200":{"description":"Successfully incremented template visit count."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/template/%7BtemplateId%7D/visit \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/visit';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/%7BtemplateId%7D/visit',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D/visit\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/permalink/{identifier}":{"get":{"description":"Get template redirect URL for permalink","summary":"Get template permalink redirect URL","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"identifier","in":"path"}],"responses":{"200":{"description":"Successfully resolved template permalink.","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/template/permalink/%7Bidentifier%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/permalink/%7Bidentifier%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/template/permalink/%7Bidentifier%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/permalink/%7Bidentifier%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/publish":{"put":{"description":"publish or unpublish a base","summary":"publish or unpublish a base","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"cover":{"type":"object","nullable":true,"properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]}},"required":["token","size","url","path","mimetype","name","id"]},"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true}},"required":["title","description"]}}}},"responses":{"200":{"description":"publish base successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/publish \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"title\":\"string\",\"description\":\"string\",\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"nodes\":[\"string\"],\"includeData\":true,\"defaultActiveNodeId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/publish';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"title\":\"string\",\"description\":\"string\",\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"nodes\":[\"string\"],\"includeData\":true,\"defaultActiveNodeId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/publish',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  title: 'string',\n  description: 'string',\n  cover: {\n    token: 'xxxxxxxxxxx',\n    size: 1024,\n    url: '/bucket/xxxxx',\n    path: '/table/xxxxxx',\n    mimetype: 'video/mp4',\n    width: 100,\n    height: 100,\n    name: 'string',\n    id: 'string',\n    thumbnailPath: {lg: 'string', sm: 'string'}\n  },\n  nodes: ['string'],\n  includeData: true,\n  defaultActiveNodeId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"title\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"cover\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"name\\\":\\\"string\\\",\\\"id\\\":\\\"string\\\",\\\"thumbnailPath\\\":{\\\"lg\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\"}},\\\"nodes\\\":[\\\"string\\\"],\\\"includeData\\\":true,\\\"defaultActiveNodeId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/publish\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import":{"post":{"description":"import a base","summary":"import a base","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]},"spaceId":{"type":"string"}},"required":["notify","spaceId"]}}}},"responses":{"200":{"description":"import successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/import \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/import',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  notify: {\n    token: 'xxxxxxxxxxx',\n    size: 1024,\n    url: '/bucket/xxxxx',\n    path: '/table/xxxxxx',\n    mimetype: 'video/mp4',\n    width: 100,\n    height: 100,\n    presignedUrl: 'string'\n  },\n  spaceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"},\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import-stream":{"post":{"description":"import a base with SSE progress stream","summary":"import a base with SSE progress events","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]},"spaceId":{"type":"string"}},"required":["notify","spaceId"]}}}},"responses":{"200":{"description":"SSE stream with progress events and final result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/import-stream \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-stream';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/import-stream',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  notify: {\n    token: 'xxxxxxxxxxx',\n    size: 1024,\n    url: '/bucket/xxxxx',\n    path: '/table/xxxxxx',\n    mimetype: 'video/mp4',\n    width: 100,\n    height: 100,\n    presignedUrl: 'string'\n  },\n  spaceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"},\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/move":{"put":{"description":"move a base to another space","summary":"move a base to another space","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]}}}},"responses":{"200":{"description":"move to another space successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/move \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/move';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"spaceId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/move',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({spaceId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/erd":{"get":{"description":"Get the erd of a base","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the erd of a base.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"},"crossBaseId":{"type":"string"},"crossBaseName":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."}},"required":["id","name","type"]}}},"required":["id","name","fields"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["tableId","tableName","fieldId","fieldName"]},"target":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["tableId","tableName","fieldId","fieldName"]},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"]},"isOneWay":{"type":"boolean"},"type":{"anyOf":[{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},{"type":"string","enum":["lookup"]}]}},"required":["source","target","type"]}}},"required":["baseId","nodes","edges"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/erd \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/erd';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/erd',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/erd\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/base":{"get":{"description":"Get base list by query","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of base.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/base \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/base',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/permanent":{"delete":{"description":"Permanently delete a space by spaceId","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/permanent \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/permanent',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/mail-sender/test-transport-config":{"post":{"description":"Test mail transporter","tags":["mail"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"type":"string","format":"email"},"message":{"type":"string"},"transportConfig":{"type":"object","properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}},"required":["to","transportConfig"]}}}},"responses":{"200":{"description":"Test mail transporter successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/mail-sender/test-transport-config \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"to\":\"user@example.com\",\"message\":\"string\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/mail-sender/test-transport-config';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"to\":\"user@example.com\",\"message\":\"string\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/mail-sender/test-transport-config',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  to: 'user@example.com',\n  message: 'string',\n  transportConfig: {\n    senderName: 'string',\n    sender: 'string',\n    host: 'string',\n    port: 0,\n    secure: true,\n    auth: {user: 'string', pass: 'string'}\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"to\\\":\\\"user@example.com\\\",\\\"message\\\":\\\"string\\\",\\\"transportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/mail-sender/test-transport-config\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting":{"patch":{"description":"Get the instance settings","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"disallowSignUp":{"type":"boolean"},"disallowSpaceCreation":{"type":"boolean"},"disallowSpaceInvitation":{"type":"boolean"},"enableEmailVerification":{"type":"boolean"},"enableCreditReward":{"type":"boolean"},"aiConfig":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"enable":{"type":"boolean"}}},"enableWaitlist":{"type":"boolean"},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}},"brandName":{"type":"string"},"canaryConfig":{"type":"object","properties":{"enabled":{"type":"boolean"},"spaceIds":{"type":"array","items":{"type":"string"},"default":[]},"forceV2All":{"type":"boolean"}},"required":["enabled"]},"notifyMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]},"automationMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}}}}}},"responses":{"200":{"description":"Update settings successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/admin/setting \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"disallowSignUp\":true,\"disallowSpaceCreation\":true,\"disallowSpaceInvitation\":true,\"enableEmailVerification\":true,\"enableCreditReward\":true,\"aiConfig\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"enable\":true},\"enableWaitlist\":true,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"},\"brandName\":\"string\",\"canaryConfig\":{\"enabled\":true,\"spaceIds\":[],\"forceV2All\":true},\"notifyMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}},\"automationMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"disallowSignUp\":true,\"disallowSpaceCreation\":true,\"disallowSpaceInvitation\":true,\"enableEmailVerification\":true,\"enableCreditReward\":true,\"aiConfig\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"enable\":true},\"enableWaitlist\":true,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"},\"brandName\":\"string\",\"canaryConfig\":{\"enabled\":true,\"spaceIds\":[],\"forceV2All\":true},\"notifyMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}},\"automationMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  disallowSignUp: true,\n  disallowSpaceCreation: true,\n  disallowSpaceInvitation: true,\n  enableEmailVerification: true,\n  enableCreditReward: true,\n  aiConfig: {\n    llmProviders: [],\n    embeddingModel: 'string',\n    translationModel: 'string',\n    chatModel: {\n      lg: 'string',\n      md: 'string',\n      sm: 'string',\n      ability: {\n        image: true,\n        pdf: true,\n        webSearch: true,\n        toolCall: true,\n        reasoning: true,\n        imageGeneration: true\n      }\n    },\n    gatewayModels: [\n      {\n        id: 'string',\n        label: 'string',\n        enabled: true,\n        capabilities: {\n          image: true,\n          pdf: true,\n          webSearch: true,\n          toolCall: true,\n          reasoning: true,\n          imageGeneration: true\n        },\n        pricing: {\n          input: 'string',\n          output: 'string',\n          inputCacheRead: 'string',\n          inputCacheWrite: 'string',\n          reasoning: 'string',\n          image: 'string',\n          webSearch: 'string'\n        },\n        rates: {\n          inputRate: 0,\n          outputRate: 0,\n          cacheReadRate: 0,\n          cacheWriteRate: 0,\n          reasoningRate: 0,\n          imageRate: 0,\n          webSearchRate: 0\n        },\n        isImageModel: true,\n        defaultFor: ['chatLg'],\n        testedAt: 0,\n        ownedBy: 'alibaba',\n        modelType: 'language',\n        tags: ['reasoning'],\n        contextWindow: 0,\n        maxTokens: 0,\n        description: 'string'\n      }\n    ],\n    capabilities: {disableActions: ['string']},\n    aiGatewayApiKey: 'string',\n    aiGatewayBaseUrl: 'http://example.com',\n    attachmentTest: {\n      urlMode: {success: true, errorMessage: 'string'},\n      base64Mode: {success: true, errorMessage: 'string'},\n      testedAt: 'string',\n      testedOrigin: 'string',\n      recommendedMode: 'url'\n    },\n    attachmentTransferMode: 'url',\n    aiGatewayApiKeys: ['string'],\n    vertexByokCredential: {\n      project: 'string',\n      location: 'string',\n      googleCredentials: {privateKey: 'string', clientEmail: 'string'}\n    },\n    concurrencyGroups: [{id: 'string', name: 'string', taskTypes: [], keys: [], perKey: 5}],\n    concurrencyPerKey: 1,\n    enable: true\n  },\n  enableWaitlist: true,\n  appConfig: {\n    apiKey: 'string',\n    vercelToken: 'string',\n    customDomain: 'string',\n    creditCount: 0,\n    v0BaseUrl: 'http://example.com',\n    vercelBaseUrl: 'http://example.com'\n  },\n  brandName: 'string',\n  canaryConfig: {enabled: true, spaceIds: [], forceV2All: true},\n  notifyMailTransportConfig: {\n    senderName: 'string',\n    sender: 'string',\n    host: 'string',\n    port: 0,\n    secure: true,\n    auth: {user: 'string', pass: 'string'}\n  },\n  automationMailTransportConfig: {\n    senderName: 'string',\n    sender: 'string',\n    host: 'string',\n    port: 0,\n    secure: true,\n    auth: {user: 'string', pass: 'string'}\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"disallowSignUp\\\":true,\\\"disallowSpaceCreation\\\":true,\\\"disallowSpaceInvitation\\\":true,\\\"enableEmailVerification\\\":true,\\\"enableCreditReward\\\":true,\\\"aiConfig\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true}},\\\"gatewayModels\\\":[{\\\"id\\\":\\\"string\\\",\\\"label\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"capabilities\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\"},\\\"rates\\\":{\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0},\\\"isImageModel\\\":true,\\\"defaultFor\\\":[\\\"chatLg\\\"],\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"reasoning\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"]},\\\"aiGatewayApiKey\\\":\\\"string\\\",\\\"aiGatewayBaseUrl\\\":\\\"http://example.com\\\",\\\"attachmentTest\\\":{\\\"urlMode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"base64Mode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"testedAt\\\":\\\"string\\\",\\\"testedOrigin\\\":\\\"string\\\",\\\"recommendedMode\\\":\\\"url\\\"},\\\"attachmentTransferMode\\\":\\\"url\\\",\\\"aiGatewayApiKeys\\\":[\\\"string\\\"],\\\"vertexByokCredential\\\":{\\\"project\\\":\\\"string\\\",\\\"location\\\":\\\"string\\\",\\\"googleCredentials\\\":{\\\"privateKey\\\":\\\"string\\\",\\\"clientEmail\\\":\\\"string\\\"}},\\\"concurrencyGroups\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"taskTypes\\\":[],\\\"keys\\\":[],\\\"perKey\\\":5}],\\\"concurrencyPerKey\\\":1,\\\"enable\\\":true},\\\"enableWaitlist\\\":true,\\\"appConfig\\\":{\\\"apiKey\\\":\\\"string\\\",\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"creditCount\\\":0,\\\"v0BaseUrl\\\":\\\"http://example.com\\\",\\\"vercelBaseUrl\\\":\\\"http://example.com\\\"},\\\"brandName\\\":\\\"string\\\",\\\"canaryConfig\\\":{\\\"enabled\\\":true,\\\"spaceIds\\\":[],\\\"forceV2All\\\":true},\\\"notifyMailTransportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}},\\\"automationMailTransportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/setting\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get the instance settings","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the instance settings.","content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string"},"brandName":{"type":"string","nullable":true},"brandLogo":{"type":"string","nullable":true},"disallowSignUp":{"type":"boolean","nullable":true},"disallowSpaceCreation":{"type":"boolean","nullable":true},"disallowSpaceInvitation":{"type":"boolean","nullable":true},"disallowDashboard":{"type":"boolean","nullable":true},"enableEmailVerification":{"type":"boolean","nullable":true},"enableWaitlist":{"type":"boolean","nullable":true},"enableCreditReward":{"type":"boolean","nullable":true},"aiConfig":{"type":"object","nullable":true,"properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"enable":{"type":"boolean"}}},"notifyMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]},"automationMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]},"appConfig":{"type":"object","nullable":true,"properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}},"canaryConfig":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"spaceIds":{"type":"array","items":{"type":"string"},"default":[]},"forceV2All":{"type":"boolean"}},"required":["enabled"]},"trashCleanupEnabledAt":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["instanceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/setting \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/public":{"get":{"description":"Get the public instance settings","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the public instance settings.","content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string"},"brandName":{"type":"string","nullable":true},"brandLogo":{"type":"string","nullable":true},"disallowSignUp":{"type":"boolean","nullable":true},"disallowSpaceCreation":{"type":"boolean","nullable":true},"disallowSpaceInvitation":{"type":"boolean","nullable":true},"disallowDashboard":{"type":"boolean","nullable":true},"enableEmailVerification":{"type":"boolean","nullable":true},"enableWaitlist":{"type":"boolean","nullable":true},"createdTime":{"type":"string"},"aiConfig":{"type":"object","nullable":true,"properties":{"enable":{"type":"boolean"},"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"}},"required":["type","name"]}},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}}},"required":["enable","llmProviders"]},"appGenerationEnabled":{"type":"boolean"},"turnstileSiteKey":{"type":"string","nullable":true},"changeEmailSendCodeMailRate":{"type":"number"},"resetPasswordSendMailRate":{"type":"number"},"signupVerificationSendCodeMailRate":{"type":"number"},"enableCreditReward":{"type":"boolean"}},"required":["instanceId","aiConfig"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/setting/public \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/public';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting/public',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting/public\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/logo":{"patch":{"description":"Upload logo","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"Successfully upload logo.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/admin/setting/logo \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: multipart/form-data' \\\n  --form file=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/logo';\nconst form = new FormData();\nform.append('file', 'string');\n\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting/logo',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/setting/logo\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/test-llm":{"post":{"description":"Test LLM provider configuration","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"modelKey":{"type":"string"},"ability":{"type":"array","items":{"type":"string","enum":["image","pdf","webSearch","toolCall","reasoning","imageGeneration"]}},"testImageGeneration":{"type":"boolean"},"testImageToImage":{"type":"boolean"}},"required":["type","name","apiKey","baseUrl"]}}}},"responses":{"200":{"description":"Test result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"response":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/admin/setting/test-llm \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"modelKey\":\"string\",\"ability\":[\"image\"],\"testImageGeneration\":true,\"testImageToImage\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/test-llm';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"modelKey\":\"string\",\"ability\":[\"image\"],\"testImageGeneration\":true,\"testImageToImage\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting/test-llm',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'openai',\n  name: 'string',\n  apiKey: 'string',\n  baseUrl: 'http://example.com',\n  models: '',\n  modelKey: 'string',\n  ability: ['image'],\n  testImageGeneration: true,\n  testImageToImage: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"openai\\\",\\\"name\\\":\\\"string\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"http://example.com\\\",\\\"models\\\":\\\"\\\",\\\"modelKey\\\":\\\"string\\\",\\\"ability\\\":[\\\"image\\\"],\\\"testImageGeneration\\\":true,\\\"testImageToImage\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/test-llm\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/batch-test-llm":{"post":{"description":"Batch test all configured LLM models to verify compatibility with AI field features","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"}},"required":["type","name","apiKey","baseUrl","isInstance"]}}}}}}},"responses":{"200":{"description":"Batch test results","content":{"application/json":{"schema":{"type":"object","properties":{"totalModels":{"type":"number"},"testedModels":{"type":"number"},"successCount":{"type":"number"},"failedCount":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"modelKey":{"type":"string"},"providerName":{"type":"string"},"providerType":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"model":{"type":"string"},"success":{"type":"boolean"},"error":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}},"required":["modelKey","providerName","providerType","model","success"]}}},"required":["totalModels","testedModels","successCount","failedCount","results"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/admin/setting/batch-test-llm \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"providers\":[{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"isInstance\":true}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/batch-test-llm';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"providers\":[{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"isInstance\":true}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting/batch-test-llm',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  providers: [\n    {\n      type: 'openai',\n      name: 'string',\n      apiKey: 'string',\n      baseUrl: 'http://example.com',\n      models: '',\n      isInstance: true\n    }\n  ]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"providers\\\":[{\\\"type\\\":\\\"openai\\\",\\\"name\\\":\\\"string\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"http://example.com\\\",\\\"models\\\":\\\"\\\",\\\"isInstance\\\":true}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/batch-test-llm\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/test-api-key":{"post":{"description":"Test API key validity for AI Gateway or v0, optionally test attachment transfer modes","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["aiGateway","v0","vercel"]},"apiKey":{"type":"string"},"baseUrl":{"type":"string"},"testAttachment":{"type":"boolean"}},"required":["type","apiKey"]}}}},"responses":{"200":{"description":"Test result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","need_credit_card","insufficient_quota","network_error","unknown"]},"message":{"type":"string"}},"required":["code"]},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"recommendedMode":{"type":"string","enum":["url","base64"]},"testedOrigin":{"type":"string"}}}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/admin/setting/test-api-key \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"aiGateway\",\"apiKey\":\"string\",\"baseUrl\":\"string\",\"testAttachment\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/test-api-key';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"aiGateway\",\"apiKey\":\"string\",\"baseUrl\":\"string\",\"testAttachment\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting/test-api-key',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({type: 'aiGateway', apiKey: 'string', baseUrl: 'string', testAttachment: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"aiGateway\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"string\\\",\\\"testAttachment\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/test-api-key\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/test-public-access":{"get":{"description":"Test if this Teable instance is publicly accessible from the internet","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Public access test result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"publicOrigin":{"type":"string"},"error":{"type":"string"},"storageCheck":{"type":"object","properties":{"success":{"type":"boolean"},"storageUrl":{"type":"string"},"error":{"type":"string"}},"required":["success"]}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/setting/test-public-access \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/test-public-access';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting/test-public-access',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting/test-public-access\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/set-mail-transport-config":{"put":{"description":"Set mail transporter","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["notifyMailTransportConfig"]},{"type":"string","enum":["automationMailTransportConfig"]}]},"transportConfig":{"type":"object","properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}},"required":["name","transportConfig"]}}}},"responses":{"200":{"description":"Set mail transporter successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["notifyMailTransportConfig"]},{"type":"string","enum":["automationMailTransportConfig"]}]},"transportConfig":{"type":"object","properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}},"required":["name","transportConfig"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/admin/setting/set-mail-transport-config \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"notifyMailTransportConfig\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/set-mail-transport-config';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"notifyMailTransportConfig\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting/set-mail-transport-config',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'notifyMailTransportConfig',\n  transportConfig: {\n    senderName: 'string',\n    sender: 'string',\n    host: 'string',\n    port: 0,\n    secure: true,\n    auth: {user: 'string', pass: 'string'}\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"notifyMailTransportConfig\\\",\\\"transportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/admin/setting/set-mail-transport-config\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/ai-key-stats":{"get":{"description":"Get per-key usage statistics for AI Gateway API keys","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Key statistics by group","content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"object","additionalProperties":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"fingerprint":{"type":"string"},"totalRequests":{"type":"number"},"totalFailures":{"type":"number"},"activeRequests":{"type":"number"},"lastUsedAt":{"type":"number","nullable":true},"isActive":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["index","fingerprint","totalRequests","totalFailures","activeRequests","lastUsedAt","isActive","lastError"]}},"totalSlots":{"type":"number"},"activeSlots":{"type":"number"},"waitingCount":{"type":"number"}},"required":["keys","totalSlots","activeSlots","waitingCount"]}}},"required":["groups"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/setting/ai-key-stats \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/ai-key-stats';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/setting/ai-key-stats',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting/ai-key-stats\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/plugin/{pluginId}/publish":{"patch":{"description":"Publish a plugin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin published successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/publish \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/publish';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/plugin/%7BpluginId%7D/publish',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/plugin/%7BpluginId%7D/publish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/plugin/{pluginId}/unpublish":{"patch":{"description":"Admin unpublish a plugin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin unpublished successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/unpublish \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/unpublish';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/plugin/%7BpluginId%7D/unpublish',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/plugin/%7BpluginId%7D/unpublish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license/status":{"get":{"description":"Get enterprise license expiration status","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns enterprise license expiration status.","content":{"application/json":{"schema":{"type":"object","properties":{"expiredTime":{"type":"string","nullable":true}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/enterprise-license/status \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/status';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/enterprise-license/status',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/enterprise-license/status\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/integration":{"get":{"description":"Get integration list by query","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of integration.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"type":{"type":"string","enum":["AI"]},"enable":{"type":"boolean"},"config":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}}}},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","spaceId","type","config","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/integration \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/integration',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/integration\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a integration to a space","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["AI"]},"enable":{"type":"boolean"},"config":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}}}}},"required":["type","config"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/integration \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"AI\",\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"AI\",\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/integration',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'AI',\n  enable: true,\n  config: {\n    llmProviders: [],\n    embeddingModel: 'string',\n    translationModel: 'string',\n    chatModel: {\n      lg: 'string',\n      md: 'string',\n      sm: 'string',\n      ability: {\n        image: true,\n        pdf: true,\n        webSearch: true,\n        toolCall: true,\n        reasoning: true,\n        imageGeneration: true\n      }\n    },\n    gatewayModels: [\n      {\n        id: 'string',\n        label: 'string',\n        enabled: true,\n        capabilities: {\n          image: true,\n          pdf: true,\n          webSearch: true,\n          toolCall: true,\n          reasoning: true,\n          imageGeneration: true\n        },\n        pricing: {\n          input: 'string',\n          output: 'string',\n          inputCacheRead: 'string',\n          inputCacheWrite: 'string',\n          reasoning: 'string',\n          image: 'string',\n          webSearch: 'string'\n        },\n        rates: {\n          inputRate: 0,\n          outputRate: 0,\n          cacheReadRate: 0,\n          cacheWriteRate: 0,\n          reasoningRate: 0,\n          imageRate: 0,\n          webSearchRate: 0\n        },\n        isImageModel: true,\n        defaultFor: ['chatLg'],\n        testedAt: 0,\n        ownedBy: 'alibaba',\n        modelType: 'language',\n        tags: ['reasoning'],\n        contextWindow: 0,\n        maxTokens: 0,\n        description: 'string'\n      }\n    ],\n    capabilities: {disableActions: ['string']},\n    aiGatewayApiKey: 'string',\n    aiGatewayBaseUrl: 'http://example.com',\n    attachmentTest: {\n      urlMode: {success: true, errorMessage: 'string'},\n      base64Mode: {success: true, errorMessage: 'string'},\n      testedAt: 'string',\n      testedOrigin: 'string',\n      recommendedMode: 'url'\n    },\n    attachmentTransferMode: 'url',\n    aiGatewayApiKeys: ['string'],\n    vertexByokCredential: {\n      project: 'string',\n      location: 'string',\n      googleCredentials: {privateKey: 'string', clientEmail: 'string'}\n    },\n    concurrencyGroups: [{id: 'string', name: 'string', taskTypes: [], keys: [], perKey: 5}],\n    concurrencyPerKey: 1,\n    appConfig: {\n      apiKey: 'string',\n      vercelToken: 'string',\n      customDomain: 'string',\n      creditCount: 0,\n      v0BaseUrl: 'http://example.com',\n      vercelBaseUrl: 'http://example.com'\n    }\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"AI\\\",\\\"enable\\\":true,\\\"config\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true}},\\\"gatewayModels\\\":[{\\\"id\\\":\\\"string\\\",\\\"label\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"capabilities\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\"},\\\"rates\\\":{\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0},\\\"isImageModel\\\":true,\\\"defaultFor\\\":[\\\"chatLg\\\"],\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"reasoning\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"]},\\\"aiGatewayApiKey\\\":\\\"string\\\",\\\"aiGatewayBaseUrl\\\":\\\"http://example.com\\\",\\\"attachmentTest\\\":{\\\"urlMode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"base64Mode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"testedAt\\\":\\\"string\\\",\\\"testedOrigin\\\":\\\"string\\\",\\\"recommendedMode\\\":\\\"url\\\"},\\\"attachmentTransferMode\\\":\\\"url\\\",\\\"aiGatewayApiKeys\\\":[\\\"string\\\"],\\\"vertexByokCredential\\\":{\\\"project\\\":\\\"string\\\",\\\"location\\\":\\\"string\\\",\\\"googleCredentials\\\":{\\\"privateKey\\\":\\\"string\\\",\\\"clientEmail\\\":\\\"string\\\"}},\\\"concurrencyGroups\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"taskTypes\\\":[],\\\"keys\\\":[],\\\"perKey\\\":5}],\\\"concurrencyPerKey\\\":1,\\\"appConfig\\\":{\\\"apiKey\\\":\\\"string\\\",\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"creditCount\\\":0,\\\"v0BaseUrl\\\":\\\"http://example.com\\\",\\\"vercelBaseUrl\\\":\\\"http://example.com\\\"}}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/integration\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/integration/{integrationId}":{"patch":{"description":"Update a integration to a space","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enable":{"type":"boolean"},"config":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}}}}}}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  enable: true,\n  config: {\n    llmProviders: [],\n    embeddingModel: 'string',\n    translationModel: 'string',\n    chatModel: {\n      lg: 'string',\n      md: 'string',\n      sm: 'string',\n      ability: {\n        image: true,\n        pdf: true,\n        webSearch: true,\n        toolCall: true,\n        reasoning: true,\n        imageGeneration: true\n      }\n    },\n    gatewayModels: [\n      {\n        id: 'string',\n        label: 'string',\n        enabled: true,\n        capabilities: {\n          image: true,\n          pdf: true,\n          webSearch: true,\n          toolCall: true,\n          reasoning: true,\n          imageGeneration: true\n        },\n        pricing: {\n          input: 'string',\n          output: 'string',\n          inputCacheRead: 'string',\n          inputCacheWrite: 'string',\n          reasoning: 'string',\n          image: 'string',\n          webSearch: 'string'\n        },\n        rates: {\n          inputRate: 0,\n          outputRate: 0,\n          cacheReadRate: 0,\n          cacheWriteRate: 0,\n          reasoningRate: 0,\n          imageRate: 0,\n          webSearchRate: 0\n        },\n        isImageModel: true,\n        defaultFor: ['chatLg'],\n        testedAt: 0,\n        ownedBy: 'alibaba',\n        modelType: 'language',\n        tags: ['reasoning'],\n        contextWindow: 0,\n        maxTokens: 0,\n        description: 'string'\n      }\n    ],\n    capabilities: {disableActions: ['string']},\n    aiGatewayApiKey: 'string',\n    aiGatewayBaseUrl: 'http://example.com',\n    attachmentTest: {\n      urlMode: {success: true, errorMessage: 'string'},\n      base64Mode: {success: true, errorMessage: 'string'},\n      testedAt: 'string',\n      testedOrigin: 'string',\n      recommendedMode: 'url'\n    },\n    attachmentTransferMode: 'url',\n    aiGatewayApiKeys: ['string'],\n    vertexByokCredential: {\n      project: 'string',\n      location: 'string',\n      googleCredentials: {privateKey: 'string', clientEmail: 'string'}\n    },\n    concurrencyGroups: [{id: 'string', name: 'string', taskTypes: [], keys: [], perKey: 5}],\n    concurrencyPerKey: 1,\n    appConfig: {\n      apiKey: 'string',\n      vercelToken: 'string',\n      customDomain: 'string',\n      creditCount: 0,\n      v0BaseUrl: 'http://example.com',\n      vercelBaseUrl: 'http://example.com'\n    }\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"enable\\\":true,\\\"config\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true}},\\\"gatewayModels\\\":[{\\\"id\\\":\\\"string\\\",\\\"label\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"capabilities\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\"},\\\"rates\\\":{\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0},\\\"isImageModel\\\":true,\\\"defaultFor\\\":[\\\"chatLg\\\"],\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"reasoning\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"]},\\\"aiGatewayApiKey\\\":\\\"string\\\",\\\"aiGatewayBaseUrl\\\":\\\"http://example.com\\\",\\\"attachmentTest\\\":{\\\"urlMode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"base64Mode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"testedAt\\\":\\\"string\\\",\\\"testedOrigin\\\":\\\"string\\\",\\\"recommendedMode\\\":\\\"url\\\"},\\\"attachmentTransferMode\\\":\\\"url\\\",\\\"aiGatewayApiKeys\\\":[\\\"string\\\"],\\\"vertexByokCredential\\\":{\\\"project\\\":\\\"string\\\",\\\"location\\\":\\\"string\\\",\\\"googleCredentials\\\":{\\\"privateKey\\\":\\\"string\\\",\\\"clientEmail\\\":\\\"string\\\"}},\\\"concurrencyGroups\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"taskTypes\\\":[],\\\"keys\\\":[],\\\"perKey\\\":5}],\\\"concurrencyPerKey\\\":1,\\\"appConfig\\\":{\\\"apiKey\\\":\\\"string\\\",\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"creditCount\\\":0,\\\"v0BaseUrl\\\":\\\"http://example.com\\\",\\\"vercelBaseUrl\\\":\\\"http://example.com\\\"}}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a integration by integrationId","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/search":{"get":{"description":"Search bases and nodes within a space","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","enum":["space","base","table","view","field","record","workflow","app","dashboard","folder"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"string","minLength":1},"required":true,"name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Returns the search results.","content":{"application/json":{"schema":{"type":"object","properties":{"list":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["space","base","table","view","field","record","workflow","app","dashboard","folder"]},"icon":{"type":"string","nullable":true},"baseId":{"type":"string"},"baseName":{"type":"string"},"createdTime":{"type":"string"},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","avatar"]}},"required":["id","name","type","icon","baseId","baseName","createdTime"]}},"total":{"type":"number"},"nextCursor":{"type":"string","nullable":true}},"required":["list","total","nextCursor"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash":{"get":{"description":"Get trash list for spaces or bases","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"spaceId","in":"query"},{"schema":{"type":"string","enum":["space","base"]},"required":true,"name":"resourceType","in":"query"}],"responses":{"200":{"description":"Get trash successfully","content":{"application/json":{"schema":{"type":"object","properties":{"trashItems":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string","enum":["space","base","table","app","workflow"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceId","resourceType","deletedTime","deletedBy"]},{"type":"object","properties":{"id":{"type":"string"},"resourceIds":{"type":"array","items":{"type":"string"}},"resourceType":{"type":"string","enum":["view","field","record"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceIds","resourceType","deletedTime","deletedBy"]}]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"resourceMap":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["id","spaceId","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]}},"required":["id","name","type"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"isLookup":{"type":"boolean","nullable":true},"isConditionalLookup":{"type":"boolean","nullable":true},"options":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["id","name","type","isLookup"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}]}},"nextCursor":{"type":"string","nullable":true}},"required":["trashItems","userMap","resourceMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/items":{"get":{"description":"Get trash items for base or table","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"query"},{"schema":{"type":"string","enum":["base","table"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Get trash successfully","content":{"application/json":{"schema":{"type":"object","properties":{"trashItems":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string","enum":["space","base","table","app","workflow"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceId","resourceType","deletedTime","deletedBy"]},{"type":"object","properties":{"id":{"type":"string"},"resourceIds":{"type":"array","items":{"type":"string"}},"resourceType":{"type":"string","enum":["view","field","record"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceIds","resourceType","deletedTime","deletedBy"]}]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"resourceMap":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["id","spaceId","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]}},"required":["id","name","type"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"isLookup":{"type":"boolean","nullable":true},"isConditionalLookup":{"type":"boolean","nullable":true},"options":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["id","name","type","isLookup"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}]}},"nextCursor":{"type":"string","nullable":true}},"required":["trashItems","userMap","resourceMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/reset-items":{"delete":{"description":"Reset trash items for a base or table","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"query"},{"schema":{"type":"string","enum":["base","table"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Reset successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/restore/{trashId}":{"post":{"description":"restore a space, base, table, etc.","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"trashId","in":"path"}],"responses":{"201":{"description":"Restored successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/trash/restore/%7BtrashId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/restore/%7BtrashId%7D';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/trash/restore/%7BtrashId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/trash/restore/%7BtrashId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/history":{"get":{"summary":"Get record history","description":"Retrieve the change history of a specific record, including field modifications and user information.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Get the history list for a record","content":{"application/json":{"schema":{"type":"object","properties":{"historyList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tableId":{"type":"string"},"recordId":{"type":"string"},"fieldId":{"type":"string"},"before":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"after":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"createdTime":{"type":"string"},"createdBy":{"type":"string"}},"required":["id","tableId","recordId","fieldId","before","after","createdTime","createdBy"]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"nextCursor":{"type":"string","nullable":true}},"required":["historyList","userMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/history \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/history';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/history',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/history\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/history":{"get":{"summary":"Get table records history","description":"Retrieve the change history of all records in a table, including field modifications and user information.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Get the history list of all records in a table","content":{"application/json":{"schema":{"type":"object","properties":{"historyList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tableId":{"type":"string"},"recordId":{"type":"string"},"fieldId":{"type":"string"},"before":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"after":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"createdTime":{"type":"string"},"createdBy":{"type":"string"}},"required":["id","tableId","recordId","fieldId","before","after","createdTime","createdBy"]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"nextCursor":{"type":"string","nullable":true}},"required":["historyList","userMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/history \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/history';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/history',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/history\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/uploadAttachment":{"post":{"summary":"Upload attachment","description":"Upload an attachment from a file or URL and append it to the cell","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string","description":"ID of an attachment field"},"required":true,"description":"ID of an attachment field","name":"fieldId","in":"path"}],"requestBody":{"description":"upload attachment","required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"fileUrl":{"type":"string"}}}}}},"responses":{"201":{"description":"Returns record data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: multipart/form-data' \\\n  --form file=string \\\n  --form fileUrl=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment';\nconst form = new FormData();\nform.append('file', 'string');\nform.append('fileUrl', 'string');\n\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"fileUrl\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"fileUrl\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/insertAttachment":{"post":{"summary":"Insert attachments at anchor","description":"Insert attachments after the anchor in the cell (append to end if anchor not found or not provided)","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string","description":"ID of an attachment field"},"required":true,"description":"ID of an attachment field","name":"fieldId","in":"path"}],"requestBody":{"description":"Attachments to insert and optional anchor position","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"token":{"type":"string"},"size":{"type":"number"},"mimetype":{"type":"string"},"presignedUrl":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"smThumbnailUrl":{"type":"string"},"lgThumbnailUrl":{"type":"string"}},"required":["id","name","path","token","size","mimetype"]},"minItems":1},"anchorId":{"type":"string"}},"required":["attachments"]}}}},"responses":{"201":{"description":"Returns record data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"attachments\":[{\"id\":\"string\",\"name\":\"string\",\"path\":\"string\",\"token\":\"string\",\"size\":0,\"mimetype\":\"string\",\"presignedUrl\":\"string\",\"width\":0,\"height\":0,\"smThumbnailUrl\":\"string\",\"lgThumbnailUrl\":\"string\"}],\"anchorId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"attachments\":[{\"id\":\"string\",\"name\":\"string\",\"path\":\"string\",\"token\":\"string\",\"size\":0,\"mimetype\":\"string\",\"presignedUrl\":\"string\",\"width\":0,\"height\":0,\"smThumbnailUrl\":\"string\",\"lgThumbnailUrl\":\"string\"}],\"anchorId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  attachments: [\n    {\n      id: 'string',\n      name: 'string',\n      path: 'string',\n      token: 'string',\n      size: 0,\n      mimetype: 'string',\n      presignedUrl: 'string',\n      width: 0,\n      height: 0,\n      smThumbnailUrl: 'string',\n      lgThumbnailUrl: 'string'\n    }\n  ],\n  anchorId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"path\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\",\\\"size\\\":0,\\\"mimetype\\\":\\\"string\\\",\\\"presignedUrl\\\":\\\"string\\\",\\\"width\\\":0,\\\"height\\\":0,\\\"smThumbnailUrl\\\":\\\"string\\\",\\\"lgThumbnailUrl\\\":\\\"string\\\"}],\\\"anchorId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/status":{"get":{"summary":"Get record status","description":"Retrieve the visibility and deletion status of a specific record.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"},"required":false,"description":"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","name":"fieldKeyType","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"List of records","content":{"application/json":{"schema":{"type":"object","properties":{"isVisible":{"type":"boolean"},"isDeleted":{"type":"boolean"}},"required":["isVisible","isDeleted"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/auto-fill":{"post":{"summary":"Auto-fill a cell by AI","description":"Automatically fill a cell in a specific record and field","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the updated record status","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/button-click":{"post":{"summary":"Button click","description":"Button click","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the clicked cell","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string"},"tableId":{"type":"string"},"fieldId":{"type":"string"},"record":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}},"required":["runId","tableId","fieldId","record"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/button-reset":{"post":{"summary":"Button reset","description":"Button reset","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the reset cell","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/collaborators":{"get":{"description":"Get collaborators of a record.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["userId","userName","email"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/form-submit":{"post":{"summary":"Submit form","description":"Submit a record through a form view. This will trigger \"When form submitted\" automations.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","description":"Form view ID"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"typecast":{"type":"boolean"}},"required":["viewId","fields"]}}}},"responses":{"201":{"description":"Returns the created record.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/record/form-submit \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"viewId\":\"string\",\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/form-submit';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"viewId\":\"string\",\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/record/form-submit',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({viewId: 'string', fields: {property1: null, property2: null}, typecast: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"string\\\",\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"typecast\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/form-submit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field":{"post":{"summary":"Create field","description":"Create a new field in the specified table with the given configuration","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"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."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"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","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]}}}},"responses":{"201":{"description":"Returns data about a field.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'singleSelect',\n  name: 'string',\n  unique: true,\n  notNull: true,\n  dbFieldName: 'string',\n  isLookup: true,\n  isConditionalLookup: true,\n  description: 'this is a summary',\n  lookupOptions: {\n    foreignTableId: 'string',\n    lookupFieldId: 'string',\n    linkFieldId: 'string',\n    filter: {}\n  },\n  options: {\n    expression: 'countall({values})',\n    timeZone: 'string',\n    formatting: null,\n    showAs: {type: 'url'}\n  },\n  aiConfig: {\n    modelKey: 'string',\n    isAutoFill: true,\n    attachPrompt: 'string',\n    type: 'extraction',\n    sourceFieldId: 'string'\n  },\n  id: 'fldxxxxxxxxxxxxxxxx',\n  order: {viewId: 'string', orderIndex: 0}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"},\\\"id\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"orderIndex\\\":0}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"List fields","description":"Retrieve a list of fields in a table with optional filtering","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","description":"The id of the view."},"required":false,"description":"The id of the view.","name":"viewId","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"filterHidden","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"}],"responses":{"200":{"description":"Returns the list of field.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete multiple fields","description":"Permanently remove multiple fields from the specified table","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"fieldIds","in":"query"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}":{"delete":{"summary":"Delete field","description":"Permanently remove a field from the specified table","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get a field","description":"Retrieve detailed information about a specific field by its ID","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns data about a field.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"summary":"Update field","description":"Update common properties of a field (name, description, dbFieldName). For other property changes, use the convert field API","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."}}}}}},"responses":{"200":{"description":"Updated Successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"this is a summary\",\"dbFieldName\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"this is a summary\",\"dbFieldName\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'this is a summary', dbFieldName: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"this is a summary\\\",\\\"dbFieldName\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/convert":{"put":{"summary":"Convert field type","description":"Convert field to a different type with automatic type casting and symmetric field handling","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"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."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false},{"nullable":true}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."}},"required":["type"],"description":"Provide the complete field configuration including all properties, modified or not"}}}},"responses":{"200":{"description":"Returns field data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'singleSelect',\n  name: 'string',\n  unique: true,\n  notNull: true,\n  dbFieldName: 'string',\n  isLookup: true,\n  isConditionalLookup: true,\n  description: 'this is a summary',\n  lookupOptions: {\n    foreignTableId: 'string',\n    lookupFieldId: 'string',\n    linkFieldId: 'string',\n    filter: {}\n  },\n  options: {\n    expression: 'countall({values})',\n    timeZone: 'string',\n    formatting: null,\n    showAs: {type: 'url'}\n  },\n  aiConfig: {\n    modelKey: 'string',\n    isAutoFill: true,\n    attachPrompt: 'string',\n    type: 'extraction',\n    sourceFieldId: 'string'\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/filter-link-records":{"get":{"description":"Getting associated records for a view filter configuration.","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns the view to filter the configured records.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/filter-link-records":{"get":{"summary":"Get linked records for filter","description":"Retrieve associated records that match the view filter configuration for a linked field","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns the link field to filter the configured records.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/auto-fill":{"post":{"summary":"Auto-fill a field by AI","description":"Automatically generate suggestions for filling a specific field","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"filter":{"type":"string","description":"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."},"orderBy":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"groupBy":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"mode":{"type":"string","enum":["all","emptyOnly"],"default":"all"}}}}}},"responses":{"200":{"description":"Returns the task ID for the auto-fill process","content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string","nullable":true},"rowCount":{"type":"number"},"processedCount":{"type":"number"},"isLimited":{"type":"boolean"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"viewId\":\"viwXXXXXXX\",\"filter\":\"string\",\"orderBy\":\"string\",\"groupBy\":\"string\",\"ignoreViewQuery\":\"string\",\"mode\":\"all\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"viewId\":\"viwXXXXXXX\",\"filter\":\"string\",\"orderBy\":\"string\",\"groupBy\":\"string\",\"ignoreViewQuery\":\"string\",\"mode\":\"all\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  viewId: 'viwXXXXXXX',\n  filter: 'string',\n  orderBy: 'string',\n  groupBy: 'string',\n  ignoreViewQuery: 'string',\n  mode: 'all'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"filter\\\":\\\"string\\\",\\\"orderBy\\\":\\\"string\\\",\\\"groupBy\\\":\\\"string\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"mode\\\":\\\"all\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/stop-fill":{"post":{"summary":"Stop auto-fill a field by AI","description":"Stop auto-fill a field by AI","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Stop auto-fill a field by AI successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/duplicate":{"post":{"summary":"Duplicate field","description":"Duplicate field","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"viewId":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Returns duplicated field data","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"viewId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"viewId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', viewId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"viewId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/delete-references":{"get":{"description":"Get resources that reference the given fields (for delete impact analysis)","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"fieldIds","in":"query"}],"responses":{"200":{"description":"Returns the referenced resources for the given fields","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"workflowNodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"type":{"type":"string"},"category":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","name","base"]}},"required":["id","type","category","source"]}},"authorityMatrixRoles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"views":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","name","base"]}},"required":["id","name","type","source"]}},"dependentFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","name","base"]}},"required":["id","name","type","source"]}}},"required":["workflowNodes","authorityMatrixRoles","views","dependentFields"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view":{"post":{"description":"Create a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]}}}},"responses":{"201":{"description":"Returns data about a view.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  type: 'grid',\n  description: 'string',\n  order: 0,\n  options: {\n    rowHeight: 'short',\n    fieldNameDisplayLines: 1,\n    frozenColumnCount: 0,\n    frozenFieldId: 'string'\n  },\n  sort: {sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true},\n  filter: {},\n  group: [{fieldId: 'string', order: 'asc'}],\n  isLocked: true,\n  shareId: 'string',\n  enableShare: true,\n  shareMeta: {\n    allowCopy: true,\n    includeHiddenField: true,\n    password: 'string',\n    includeRecords: true,\n    submit: {allow: true, requireLogin: true}\n  },\n  columnMeta: {\n    property1: {order: 0, width: 0, hidden: true, statisticFunc: 'count'},\n    property2: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"type\\\":\\\"grid\\\",\\\"description\\\":\\\"string\\\",\\\"order\\\":0,\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"},\\\"sort\\\":{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true},\\\"filter\\\":{},\\\"group\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"isLocked\\\":true,\\\"shareId\\\":\\\"string\\\",\\\"enableShare\\\":true,\\\"shareMeta\\\":{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}},\\\"columnMeta\\\":{\\\"property1\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"},\\\"property2\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get view list","description":"Get view list","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns the list of view.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}":{"delete":{"description":"Delete a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns data about a view.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/manual-sort":{"put":{"description":"Update view raw order","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}}},"required":["sortObjs"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({sortObjs: [{fieldId: 'string', order: 'asc'}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/column-meta":{"put":{"description":"Update view column meta","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"Field ID"},"columnMeta":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"additionalProperties":false}]}},"required":["fieldId","columnMeta"]}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '[{\"fieldId\":\"string\",\"columnMeta\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}]'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '[{\"fieldId\":\"string\",\"columnMeta\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}]'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify([\n  {\n    fieldId: 'string',\n    columnMeta: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n  }\n]));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"[{\\\"fieldId\\\":\\\"string\\\",\\\"columnMeta\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}]\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/filter":{"put":{"description":"Update view filter","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","example":{"filter":{"filterSet":[{"isSymbol":false,"fieldId":"fldxxxxxxxxxxxxxxxx","value":"value","operator":"is"}],"conjunction":"and"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"filter\":{\"filterSet\":[{\"isSymbol\":false,\"fieldId\":\"fldxxxxxxxxxxxxxxxx\",\"value\":\"value\",\"operator\":\"is\"}],\"conjunction\":\"and\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"filter\":{\"filterSet\":[{\"isSymbol\":false,\"fieldId\":\"fldxxxxxxxxxxxxxxxx\",\"value\":\"value\",\"operator\":\"is\"}],\"conjunction\":\"and\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/filter',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  filter: {\n    filterSet: [\n      {\n        isSymbol: false,\n        fieldId: 'fldxxxxxxxxxxxxxxxx',\n        value: 'value',\n        operator: 'is'\n      }\n    ],\n    conjunction: 'and'\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"filter\\\":{\\\"filterSet\\\":[{\\\"isSymbol\\\":false,\\\"fieldId\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"value\\\":\\\"value\\\",\\\"operator\\\":\\\"is\\\"}],\\\"conjunction\\\":\\\"and\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/filter\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/sort":{"put":{"description":"Update view sort condition","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/sort \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/sort';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/sort',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/sort\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/group":{"put":{"description":"Update view group condition","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/group \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '[{\"fieldId\":\"string\",\"order\":\"asc\"}]'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/group';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '[{\"fieldId\":\"string\",\"order\":\"asc\"}]'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/group',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify([{fieldId: 'string', order: 'asc'}]));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}]\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/group\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/options":{"patch":{"description":"Update view option","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]}},"required":["options"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/options \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/options';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/options',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  options: {\n    rowHeight: 'short',\n    fieldNameDisplayLines: 1,\n    frozenColumnCount: 0,\n    frozenFieldId: 'string'\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/options\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/record-order":{"put":{"description":"Update record order in view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string","description":"Id of the record that you want to move other records around"},"position":{"type":"string","enum":["before","after"]},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":1000,"description":"Ids of those records you want to move","maxLength":1000}},"required":["anchorId","position","recordIds"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"anchorId\":\"string\",\"position\":\"before\",\"recordIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"anchorId\":\"string\",\"position\":\"before\",\"recordIds\":[\"string\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before', recordIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\",\\\"recordIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/name":{"put":{"description":"Update view name","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/name \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/name';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/name',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/description":{"put":{"description":"Update view description","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"}},"required":["description"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/description \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/description';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"description\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/description',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/description\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/share-meta":{"put":{"description":"Update view share meta","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  allowCopy: true,\n  includeHiddenField: true,\n  password: 'string',\n  includeRecords: true,\n  submit: {allow: true, requireLogin: true}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/refresh-share-id":{"post":{"description":"Refresh view share id","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"201":{"description":"Returns successfully refreshed view share id","content":{"application/json":{"schema":{"type":"object","properties":{"shareId":{"type":"string"}},"required":["shareId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/disable-share":{"post":{"description":"Disable view share","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"201":{"description":"Returns successfully disable view share"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/enable-share":{"post":{"description":"Enable view share","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"201":{"description":"Returns successfully enable view share","content":{"application/json":{"schema":{"type":"object","properties":{"shareId":{"type":"string"}},"required":["shareId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/plugin":{"post":{"description":"Install a plugin to a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["pluginId"]}}}},"responses":{"201":{"description":"Returns data about the installed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"viewId":{"type":"string"}},"required":["pluginId","pluginInstallId","name","viewId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/plugin \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/plugin';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/plugin',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/plugin/{pluginInstallId}":{"patch":{"description":"Update storage of a plugin in a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Returns data about the updated plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"tableId":{"type":"string"},"viewId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["tableId","viewId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/plugin":{"get":{"description":"Get a view install plugin by id","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns data about the view install plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/locked":{"put":{"description":"Update the locked status of the view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isLocked":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/locked \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"isLocked\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/locked';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"isLocked\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/locked',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({isLocked: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isLocked\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/locked\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/duplicate":{"post":{"description":"Duplicate a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]}}}},"responses":{"201":{"description":"Returns data about a view.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  type: 'grid',\n  description: 'string',\n  order: 0,\n  options: {\n    rowHeight: 'short',\n    fieldNameDisplayLines: 1,\n    frozenColumnCount: 0,\n    frozenFieldId: 'string'\n  },\n  sort: {sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true},\n  filter: {},\n  group: [{fieldId: 'string', order: 'asc'}],\n  isLocked: true,\n  shareId: 'string',\n  enableShare: true,\n  shareMeta: {\n    allowCopy: true,\n    includeHiddenField: true,\n    password: 'string',\n    includeRecords: true,\n    submit: {allow: true, requireLogin: true}\n  },\n  columnMeta: {\n    property1: {order: 0, width: 0, hidden: true, statisticFunc: 'count'},\n    property2: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"type\\\":\\\"grid\\\",\\\"description\\\":\\\"string\\\",\\\"order\\\":0,\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"},\\\"sort\\\":{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true},\\\"filter\\\":{},\\\"group\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"isLocked\\\":true,\\\"shareId\\\":\\\"string\\\",\\\"enableShare\\\":true,\\\"shareMeta\\\":{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}},\\\"columnMeta\\\":{\\\"property1\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"},\\\"property2\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation":{"get":{"summary":"Get aggregated statistics","description":"Returns statistical aggregations of table data based on specified functions and grouping criteria","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns aggregations list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"aggregations":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"total":{"type":"object","nullable":true,"properties":{"value":{"anyOf":[{"type":"string"},{"type":"number"},{"nullable":true}]},"aggFunc":{"type":"string","enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"]}},"required":["value","aggFunc"],"description":"Aggregations by all data in field"},"group":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"value":{"anyOf":[{"type":"string"},{"type":"number"},{"nullable":true}]},"aggFunc":{"type":"string","enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"]}},"required":["value","aggFunc"]},"description":"Aggregations by grouped data in field"}},"required":["fieldId","total"]}}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/aggregation \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/aggregation',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/row-count":{"get":{"summary":"Get total row count","description":"Returns the total number of rows in a view based on applied filters and criteria","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"Row count for the view","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number"}},"required":["rowCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/group-points":{"get":{"summary":"Get group points","description":"Returns the distribution and count of records across different group points in the view","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Group points for the view","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/calendar-daily-collection":{"get":{"summary":"Get daily calendar data","description":"Returns records and count distribution across dates based on specified date range and fields","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDateFieldId","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDateFieldId","in":"query"}],"responses":{"200":{"description":"Calendar daily collection for the view","content":{"application/json":{"schema":{"type":"object","properties":{"countMap":{"type":"object","additionalProperties":{"type":"number"}},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}},"required":["countMap","records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/search-count":{"get":{"summary":"Get total count of search","description":"Returns the total count of records matching the specified search criteria and filters","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Search count with query","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/search-index":{"get":{"summary":"Get record indices for search","description":"Returns the indices and record IDs of records matching the search criteria","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"record index with search query","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"type":"object","properties":{"index":{"type":"number"},"fieldId":{"type":"string"},"recordId":{"type":"string"}},"required":["index","fieldId","recordId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/task-status-collection":{"get":{"summary":"Get task status collection","description":"Returns records and count distribution across task status based on specified date range and fields","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Task status collection for the view","content":{"application/json":{"schema":{"type":"object","properties":{"cells":{"type":"array","items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldId":{"type":"string"}},"required":["recordId","fieldId"]}},"fieldMap":{"type":"object","additionalProperties":{"type":"object","properties":{"taskId":{"type":"string"},"completedCount":{"type":"number"},"totalCount":{"type":"number"}},"required":["taskId","completedCount","totalCount"]}}},"required":["cells","fieldMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/aggregation/task-status-collection \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/task-status-collection';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/aggregation/task-status-collection',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/task-status-collection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/record-index":{"get":{"summary":"Get record index","description":"Returns the 0-based row index of a specific record in the current query context (respecting view filters, sort order, link filters)","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"query"}],"responses":{"200":{"description":"Record index in the current query context","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"index":{"type":"number"}},"required":["index"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/":{"post":{"summary":"Create table","description":"Create a new table in the specified base with customizable fields, views, and initial records. Default configurations will be applied if not specified.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"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":{"type":"string","nullable":true,"description":"The description of the table."},"icon":{"type":"string","nullable":true,"format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"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."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"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","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]},"description":"The fields of the table. If it is empty, 3 fields include SingleLineText, Number, SingleSelect will and 3 empty records be generated by default."},"views":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]},"description":"The views of the table. If it is empty, a grid view will be generated by default."},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"example":[{"fields":{"single line text":"text value"}}],"description":"The record data of the table. If it is empty, 3 empty records will be generated by default."},"order":{"type":"number"},"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"}},"description":"params for create a table"}}}},"responses":{"201":{"description":"Returns data about a table.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"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":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]},"description":"The fields of the table."},"views":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]},"description":"The views of the table."},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"description":"The records of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName","fields","views","records"],"description":"Complete table structure data and initial record data."}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/ \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"dbTableName\":\"string\",\"description\":\"string\",\"icon\":\"string\",\"fields\":[{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}],\"views\":[{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}],\"records\":[{\"fields\":{\"single line text\":\"text value\"}}],\"order\":0,\"fieldKeyType\":\"id\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"dbTableName\":\"string\",\"description\":\"string\",\"icon\":\"string\",\"fields\":[{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}],\"views\":[{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}],\"records\":[{\"fields\":{\"single line text\":\"text value\"}}],\"order\":0,\"fieldKeyType\":\"id\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  dbTableName: 'string',\n  description: 'string',\n  icon: 'string',\n  fields: [\n    {\n      type: 'singleSelect',\n      name: 'string',\n      unique: true,\n      notNull: true,\n      dbFieldName: 'string',\n      isLookup: true,\n      isConditionalLookup: true,\n      description: 'this is a summary',\n      lookupOptions: {\n        foreignTableId: 'string',\n        lookupFieldId: 'string',\n        linkFieldId: 'string',\n        filter: {}\n      },\n      options: {\n        expression: 'countall({values})',\n        timeZone: 'string',\n        formatting: null,\n        showAs: {type: 'url'}\n      },\n      aiConfig: {\n        modelKey: 'string',\n        isAutoFill: true,\n        attachPrompt: 'string',\n        type: 'extraction',\n        sourceFieldId: 'string'\n      },\n      id: 'fldxxxxxxxxxxxxxxxx',\n      order: {viewId: 'string', orderIndex: 0}\n    }\n  ],\n  views: [\n    {\n      name: 'string',\n      type: 'grid',\n      description: 'string',\n      order: 0,\n      options: {\n        rowHeight: 'short',\n        fieldNameDisplayLines: 1,\n        frozenColumnCount: 0,\n        frozenFieldId: 'string'\n      },\n      sort: {sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true},\n      filter: {},\n      group: [{fieldId: 'string', order: 'asc'}],\n      isLocked: true,\n      shareId: 'string',\n      enableShare: true,\n      shareMeta: {\n        allowCopy: true,\n        includeHiddenField: true,\n        password: 'string',\n        includeRecords: true,\n        submit: {allow: true, requireLogin: true}\n      },\n      columnMeta: {\n        property1: {order: 0, width: 0, hidden: true, statisticFunc: 'count'},\n        property2: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n      }\n    }\n  ],\n  records: [{fields: {'single line text': 'text value'}}],\n  order: 0,\n  fieldKeyType: 'id'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"dbTableName\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\",\\\"fields\\\":[{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"},\\\"id\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"orderIndex\\\":0}}],\\\"views\\\":[{\\\"name\\\":\\\"string\\\",\\\"type\\\":\\\"grid\\\",\\\"description\\\":\\\"string\\\",\\\"order\\\":0,\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"},\\\"sort\\\":{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true},\\\"filter\\\":{},\\\"group\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"isLocked\\\":true,\\\"shareId\\\":\\\"string\\\",\\\"enableShare\\\":true,\\\"shareMeta\\\":{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}},\\\"columnMeta\\\":{\\\"property1\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"},\\\"property2\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}}],\\\"records\\\":[{\\\"fields\\\":{\\\"single line text\\\":\\\"text value\\\"}}],\\\"order\\\":0,\\\"fieldKeyType\\\":\\\"id\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}":{"delete":{"summary":"Delete table","description":"Move a table to trash. The table can be restored within the retention period.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Table successfully moved to trash."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get table details","description":"Retrieve detailed information about a specific table, including its schema, name, and configuration.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns data about a table.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"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":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table":{"get":{"summary":"List tables","description":"Retrieve a list of all tables in the specified base, including their basic information and configurations.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successfully retrieved the list of tables.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"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":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]},"description":"The list of tables."}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/permanent":{"delete":{"summary":"Permanently delete table","description":"Permanently delete a table and all its data. This action cannot be undone.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Table and all associated data permanently deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/name":{"put":{"summary":"Update table name","description":"Update the display name of a table. This will not affect the underlying database table name.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Table name successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/name \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/name';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/name',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/icon":{"put":{"summary":"Update table tcon","description":"Update the emoji icon of a table. The icon must be a valid emoji character.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"icon":{"type":"string","format":"emoji"}},"required":["icon"]}}}},"responses":{"200":{"description":"Table icon successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"icon\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/order":{"put":{"summary":"Update table order","description":"Update the display order of a table in the base. This affects the order in which tables are shown in the UI.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Table order successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/order \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/order';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/order',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/description":{"put":{"summary":"Update table description","description":"Update or remove the description of a table. Set to null to remove the description.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","nullable":true}},"required":["description"]}}}},"responses":{"200":{"description":"Table description successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/description \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/description';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"description\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/description',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/description\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/db-table-name":{"put":{"summary":"Update db table name","description":"Update the physical database table name. Must be 1-63 characters, start with letter or underscore, contain only letters, numbers and underscore, and be unique within the base.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dbTableName":{"type":"string","minLength":1,"pattern":"^[a-z_]\\w{0,62}$/i","description":"table name in backend database. Limitation: 1-63 characters, start with letter or underscore, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing table name in the base."}},"required":["dbTableName"]}}}},"responses":{"200":{"description":"Database table name successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"dbTableName\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"dbTableName\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({dbTableName: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"dbTableName\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/default-view-id":{"get":{"summary":"Get default view id","description":"Get default view id","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns default view id","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/permission":{"get":{"summary":"Get table permissions","description":"Retrieve the current user's permissions for a table, including access rights for table operations, views, records, and fields.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Successfully retrieved table permissions for the current user.","content":{"application/json":{"schema":{"type":"object","properties":{"table":{"type":"object","additionalProperties":{"type":"boolean"}},"view":{"type":"object","additionalProperties":{"type":"boolean"}},"record":{"type":"object","additionalProperties":{"type":"boolean"}},"field":{"type":"object","additionalProperties":{"type":"boolean"}}},"required":["table","view","record","field"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/index":{"post":{"summary":"Toggle table index","description":"Toggle table index","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["search"]}},"required":["type"]}}}},"responses":{"201":{"description":"No return"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"search\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"search\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/index',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({type: 'search'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"search\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/index\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/activated-index":{"post":{"summary":"Get activated index","description":"Get the activated index of a table","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"201":{"description":"Returns table full text search index status","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","enum":["search"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/abnormal-index":{"get":{"summary":"Get abnormal indexes","description":"Retrieve a list of abnormal database indexes for a specific table by index type. This helps identify potential performance or maintenance issues.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","enum":["search"]},"required":true,"name":"type","in":"path"}],"responses":{"201":{"description":"Successfully retrieved list of abnormal indexes.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"indexName":{"type":"string"}},"required":["indexName"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/index/repair":{"patch":{"summary":"Repair table index","description":"Repair table index","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","enum":["search"]},"required":true,"name":"type","in":"path"}],"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/duplicate":{"post":{"description":"Duplicate a table","summary":"Duplicate a table","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"includeRecords":{"type":"boolean"}},"required":["name","includeRecords"]}}}},"responses":{"200":{"description":"Duplicate successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"includeRecords\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"includeRecords\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', includeRecords: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"includeRecords\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/range-to-id":{"get":{"summary":"Get ids from range","description":"Retrieve record and field identifiers based on the selected range coordinates in a table","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"},{"schema":{"type":"string","enum":["recordId","fieldId","all"],"description":"Define which Id to return."},"required":true,"description":"Define which Id to return.","name":"returnType","in":"query"}],"responses":{"200":{"description":"Copy content","content":{"application/json":{"schema":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"}},"fieldIds":{"type":"array","items":{"type":"string"}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/clear":{"patch":{"summary":"Clear selected range content","description":"Remove all content from the selected table range","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"filterByTql":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"filter":{"type":"object","description":"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."},"search":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"filterLinkCellCandidate":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"filterLinkCellSelected":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"selectedRecordIds":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"orderBy":{"type":"array","description":"An array of sort objects that specifies how the records should be ordered."},"groupBy":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"collapsedGroupIds":{"type":"array","items":{"type":"string"}},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"projection":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":1,"description":"The parameter \"ranges\" is used to represent the coordinates of a selected range in a table. ","example":[[0,0],[1,1]]},"type":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"}},"required":["ranges"]}}}},"responses":{"200":{"description":"Successful clean up"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/selection/clear \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = '\\''Completed'\\'' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/clear';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = \\'Completed\\' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/selection/clear',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  viewId: 'viwXXXXXXX',\n  ignoreViewQuery: 'string',\n  filterByTql: '{field} = \\'Completed\\' AND {field} > 5',\n  filter: {},\n  search: ['searchValue', 'fieldIdOrName', false],\n  filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n  filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n  selectedRecordIds: ['string'],\n  orderBy: [],\n  groupBy: [{fieldId: 'string', order: 'asc'}],\n  collapsedGroupIds: ['string'],\n  queryId: 'qry_xxxxxxxx',\n  projection: ['string'],\n  ranges: [[0, 0], [1, 1]],\n  type: 'columns'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"filterByTql\\\":\\\"{field} = 'Completed' AND {field} > 5\\\",\\\"filter\\\":{},\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":[],\\\"groupBy\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"collapsedGroupIds\\\":[\\\"string\\\"],\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"projection\\\":[\\\"string\\\"],\\\"ranges\\\":[[0,0],[1,1]],\\\"type\\\":\\\"columns\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/clear\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/copy":{"get":{"summary":"Copy selected table content","description":"Copy content from selected table ranges including headers if specified","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"}],"responses":{"200":{"description":"Copy content","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}},"required":["content","header"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/paste":{"patch":{"summary":"Paste content into selected range","description":"Apply paste operation to insert content into the selected table range","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"filterByTql":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"filter":{"type":"object","description":"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."},"search":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"filterLinkCellCandidate":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"filterLinkCellSelected":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"selectedRecordIds":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"orderBy":{"type":"array","description":"An array of sort objects that specifies how the records should be ordered."},"groupBy":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"collapsedGroupIds":{"type":"array","items":{"type":"string"}},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"projection":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":1,"description":"The parameter \"ranges\" is used to represent the coordinates of a selected range in a table. ","example":[[0,0],[1,1]]},"type":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"content":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"array","items":{"nullable":true}}}],"description":"Content to paste","example":"John\tDoe\tjohn.doe@example.com"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]},"description":"Table header for paste operation","example":[]}},"required":["ranges","content"]}}}},"responses":{"200":{"description":"Paste successfully","content":{"application/json":{"schema":{"type":"object","properties":{"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":2,"maxItems":2}},"required":["ranges"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/selection/paste \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = '\\''Completed'\\'' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/paste';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = \\'Completed\\' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/selection/paste',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  viewId: 'viwXXXXXXX',\n  ignoreViewQuery: 'string',\n  filterByTql: '{field} = \\'Completed\\' AND {field} > 5',\n  filter: {},\n  search: ['searchValue', 'fieldIdOrName', false],\n  filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n  filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n  selectedRecordIds: ['string'],\n  orderBy: [],\n  groupBy: [{fieldId: 'string', order: 'asc'}],\n  collapsedGroupIds: ['string'],\n  queryId: 'qry_xxxxxxxx',\n  projection: ['string'],\n  ranges: [[0, 0], [1, 1]],\n  type: 'columns',\n  content: 'John\tDoe\tjohn.doe@example.com',\n  header: []\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"filterByTql\\\":\\\"{field} = 'Completed' AND {field} > 5\\\",\\\"filter\\\":{},\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":[],\\\"groupBy\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"collapsedGroupIds\\\":[\\\"string\\\"],\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"projection\\\":[\\\"string\\\"],\\\"ranges\\\":[[0,0],[1,1]],\\\"type\\\":\\\"columns\\\",\\\"content\\\":\\\"John\\\\tDoe\\\\tjohn.doe@example.com\\\",\\\"header\\\":[]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/paste\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/delete":{"delete":{"summary":"Delete selected range data","description":"Delete records or fields within the selected table range","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"}],"responses":{"200":{"description":"Successful deletion","content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/temporaryPaste":{"patch":{"summary":"Preview paste operation results","description":"Preview the results of a paste operation without applying changes to the table","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":1,"description":"The parameter \"ranges\" is used to represent the coordinates of a selected range in a table. ","example":[[0,0],[1,1]]},"projection":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"content":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"array","items":{"nullable":true}}}],"description":"Content to paste","example":"John\tDoe\tjohn.doe@example.com"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]},"description":"Table header for paste operation","example":[]}},"required":["ranges","content"]}}}},"responses":{"200":{"description":"Paste successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/selection/temporaryPaste \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"viewId\":\"viwXXXXXXX\",\"ranges\":[[0,0],[1,1]],\"projection\":[\"string\"],\"ignoreViewQuery\":\"string\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/temporaryPaste';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"viewId\":\"viwXXXXXXX\",\"ranges\":[[0,0],[1,1]],\"projection\":[\"string\"],\"ignoreViewQuery\":\"string\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/selection/temporaryPaste',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  viewId: 'viwXXXXXXX',\n  ranges: [[0, 0], [1, 1]],\n  projection: ['string'],\n  ignoreViewQuery: 'string',\n  content: 'John\tDoe\tjohn.doe@example.com',\n  header: []\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"ranges\\\":[[0,0],[1,1]],\\\"projection\\\":[\\\"string\\\"],\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"content\\\":\\\"John\\\\tDoe\\\\tjohn.doe@example.com\\\",\\\"header\\\":[]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/temporaryPaste\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/plan":{"get":{"description":"Generate calculation plan for the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the calculation plan for the field","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"}},"required":["estimateTime","updateCellCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Generate calculation plan for converting the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"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."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false},{"nullable":true}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."}},"required":["type"]}}}},"responses":{"201":{"description":"Returns the calculation plan","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"},"skip":{"type":"boolean"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'singleSelect',\n  name: 'string',\n  unique: true,\n  notNull: true,\n  dbFieldName: 'string',\n  isLookup: true,\n  isConditionalLookup: true,\n  description: 'this is a summary',\n  lookupOptions: {\n    foreignTableId: 'string',\n    lookupFieldId: 'string',\n    linkFieldId: 'string',\n    filter: {}\n  },\n  options: {\n    expression: 'countall({values})',\n    timeZone: 'string',\n    formatting: null,\n    showAs: {type: 'url'}\n  },\n  aiConfig: {\n    modelKey: 'string',\n    isAutoFill: true,\n    attachPrompt: 'string',\n    type: 'extraction',\n    sourceFieldId: 'string'\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Generate calculation plan for deleting the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the calculation plan for deleting the field","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/plan":{"post":{"description":"Generate calculation plan for creating the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"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."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"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","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]}}}},"responses":{"201":{"description":"Returns the calculation plan for creating the field","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"}},"required":["estimateTime","updateCellCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/field/plan \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/plan';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/field/plan',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'singleSelect',\n  name: 'string',\n  unique: true,\n  notNull: true,\n  dbFieldName: 'string',\n  isLookup: true,\n  isConditionalLookup: true,\n  description: 'this is a summary',\n  lookupOptions: {\n    foreignTableId: 'string',\n    lookupFieldId: 'string',\n    linkFieldId: 'string',\n    filter: {}\n  },\n  options: {\n    expression: 'countall({values})',\n    timeZone: 'string',\n    formatting: null,\n    showAs: {type: 'url'}\n  },\n  aiConfig: {\n    modelKey: 'string',\n    isAutoFill: true,\n    attachPrompt: 'string',\n    type: 'extraction',\n    sourceFieldId: 'string'\n  },\n  id: 'fldxxxxxxxxxxxxxxxx',\n  order: {viewId: 'string', orderIndex: 0}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"},\\\"id\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"orderIndex\\\":0}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/plan\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/name":{"patch":{"description":"Update user name","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/user/name \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/name';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user/name',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/avatar":{"patch":{"description":"Update user avatar","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/user/avatar \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: multipart/form-data' \\\n  --form file=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/avatar';\nconst form = new FormData();\nform.append('file', 'string');\n\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user/avatar',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/user/avatar\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/notify-meta":{"patch":{"description":"Update user notification meta","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/user/notify-meta \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"email\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/notify-meta';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"email\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user/notify-meta',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({email: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user/notify-meta\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/lang":{"patch":{"description":"Update user language","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lang":{"type":"string"}},"required":["lang"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/user/lang \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"lang\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/lang';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"lang\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user/lang',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({lang: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"lang\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user/lang\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit":{"get":{"description":"Get user last visited resource","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Update or create user last visit record","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"parentResourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId","parentResourceId"]}}}},"responses":{"201":{"description":"Successfully updated user last visit record."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/user/last-visit \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"resourceType\":\"space\",\"resourceId\":\"string\",\"parentResourceId\":\"string\",\"childResourceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"resourceType\":\"space\",\"resourceId\":\"string\",\"parentResourceId\":\"string\",\"childResourceId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user/last-visit',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  resourceType: 'space',\n  resourceId: 'string',\n  parentResourceId: 'string',\n  childResourceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"resourceType\\\":\\\"space\\\",\\\"resourceId\\\":\\\"string\\\",\\\"parentResourceId\\\":\\\"string\\\",\\\"childResourceId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user/last-visit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/map":{"get":{"description":"Get user last visited resource map","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit map.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/list-base":{"get":{"tags":["user"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns data about user last visit base.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number"},"list":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"resource":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]},"lastVisitTime":{"type":"string"}},"required":["resourceType","resourceId","resource"]}}},"required":["total","list"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/user/last-visit/list-base \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/list-base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user/last-visit/list-base',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit/list-base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/base-node":{"get":{"description":"Get user last visited base node","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit base node.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/user/me":{"get":{"description":"Get user information","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully retrieved user information","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string","nullable":true},"notifyMeta":{"type":"object","properties":{"email":{"type":"boolean"}}},"hasPassword":{"type":"boolean"},"isAdmin":{"type":"boolean","nullable":true},"lang":{"type":"string","nullable":true},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"isAdmin":{"type":"boolean"}},"required":["id","name","departments"]}},"required":["id","name","email","notifyMeta","hasPassword"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/auth/user/me \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user/me';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/user/me',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/user/me\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signin":{"post":{"description":"Sign in","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8,"description":"Minimum 8 chars"},"turnstileToken":{"type":"string"}},"required":["email","password"]}}}},"responses":{"201":{"description":"Sign in successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string","nullable":true},"notifyMeta":{"type":"object","properties":{"email":{"type":"boolean"}}},"hasPassword":{"type":"boolean"},"isAdmin":{"type":"boolean","nullable":true},"lang":{"type":"string","nullable":true},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"isAdmin":{"type":"boolean"}},"required":["id","name","departments"]}},"required":["id","name","email","notifyMeta","hasPassword"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/signin \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signin';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/signin',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', password: 'stringst', turnstileToken: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"password\\\":\\\"stringst\\\",\\\"turnstileToken\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/signin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signout":{"post":{"description":"Sign out","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Sign out successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/signout \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signout';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/signout',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/auth/signout\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signup":{"post":{"description":"Sign up","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"},"turnstileToken":{"type":"string"},"defaultSpaceName":{"type":"string"},"refMeta":{"type":"object","properties":{"query":{"type":"string"},"referer":{"type":"string"}}},"verification":{"type":"object","properties":{"code":{"type":"string"},"token":{"type":"string"}},"required":["code","token"]},"inviteCode":{"type":"string"}},"required":["email","password"]}}}},"responses":{"201":{"description":"Sign up and sing in successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string","nullable":true},"notifyMeta":{"type":"object","properties":{"email":{"type":"boolean"}}},"hasPassword":{"type":"boolean"},"isAdmin":{"type":"boolean","nullable":true},"lang":{"type":"string","nullable":true},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"isAdmin":{"type":"boolean"}},"required":["id","name","departments"]}},"required":["id","name","email","notifyMeta","hasPassword"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/signup \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\",\"defaultSpaceName\":\"string\",\"refMeta\":{\"query\":\"string\",\"referer\":\"string\"},\"verification\":{\"code\":\"string\",\"token\":\"string\"},\"inviteCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signup';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\",\"defaultSpaceName\":\"string\",\"refMeta\":{\"query\":\"string\",\"referer\":\"string\"},\"verification\":{\"code\":\"string\",\"token\":\"string\"},\"inviteCode\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/signup',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  email: 'user@example.com',\n  password: 'stringst',\n  turnstileToken: 'string',\n  defaultSpaceName: 'string',\n  refMeta: {query: 'string', referer: 'string'},\n  verification: {code: 'string', token: 'string'},\n  inviteCode: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"password\\\":\\\"stringst\\\",\\\"turnstileToken\\\":\\\"string\\\",\\\"defaultSpaceName\\\":\\\"string\\\",\\\"refMeta\\\":{\\\"query\\\":\\\"string\\\",\\\"referer\\\":\\\"string\\\"},\\\"verification\\\":{\\\"code\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\"},\\\"inviteCode\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/signup\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/change-password":{"patch":{"description":"Change password","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":8,"description":"Minimum 8 chars"},"newPassword":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"}},"required":["password","newPassword"]}}}},"responses":{"201":{"description":"Change password successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/auth/change-password \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"password\":\"stringst\",\"newPassword\":\"stringst\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/change-password';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"password\":\"stringst\",\"newPassword\":\"stringst\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/change-password',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({password: 'stringst', newPassword: 'stringst'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"stringst\\\",\\\"newPassword\\\":\\\"stringst\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/auth/change-password\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/send-reset-password-email":{"post":{"description":"Send reset password email","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"201":{"description":"Successfully sent reset password email"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/send-reset-password-email \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"email\":\"user@example.com\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-reset-password-email';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"email\":\"user@example.com\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/send-reset-password-email',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/send-reset-password-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/reset-password":{"post":{"description":"Reset password","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"},"code":{"type":"string"}},"required":["password","code"]}}}},"responses":{"201":{"description":"Successfully reset password"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/reset-password \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"password\":\"stringst\",\"code\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/reset-password';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"password\":\"stringst\",\"code\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/reset-password',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({password: 'stringst', code: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"stringst\\\",\\\"code\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/reset-password\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/add-password":{"post":{"description":"Add password","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"}},"required":["password"]}}}},"responses":{"201":{"description":"Successfully added password"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/add-password \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"password\":\"stringst\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/add-password';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"password\":\"stringst\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/add-password',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({password: 'stringst'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"stringst\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/add-password\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/user":{"get":{"description":"Get user information via access token","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully retrieved user information","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/auth/user \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/user',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/user\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete user","tags":["auth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"confirm","in":"path"}],"responses":{"200":{"description":"Successfully deleted user"},"400":{"description":"User has deleted bases or spaces","content":{"application/json":{"schema":{"type":"object","properties":{"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"deletedTime":{"type":"string","nullable":true}},"required":["id","name","deletedTime"]}}},"required":["spaces"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/auth/user \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/user',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/auth/user\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/send-signup-verification-code":{"post":{"description":"Send signup verification code","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"turnstileToken":{"type":"string"}},"required":["email"]}}}},"responses":{"200":{"description":"Resend signup verification code successfully","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"expiresTime":{"type":"string"}},"required":["token","expiresTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/send-signup-verification-code \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"email\":\"user@example.com\",\"turnstileToken\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-signup-verification-code';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"email\":\"user@example.com\",\"turnstileToken\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/send-signup-verification-code',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', turnstileToken: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"turnstileToken\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/send-signup-verification-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/change-email":{"patch":{"description":"Change email","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"token":{"type":"string"},"code":{"type":"string"}},"required":["email","token","code"]}}}},"responses":{"200":{"description":"Change email successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/auth/change-email \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"email\":\"user@example.com\",\"token\":\"string\",\"code\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/change-email';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"email\":\"user@example.com\",\"token\":\"string\",\"code\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/change-email',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', token: 'string', code: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"token\\\":\\\"string\\\",\\\"code\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/auth/change-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/send-change-email-code":{"post":{"description":"Send change email code","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["email","password"]}}}},"responses":{"200":{"description":"Send change email code successfully","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/send-change-email-code \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"email\":\"user@example.com\",\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-change-email-code';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"email\":\"user@example.com\",\"password\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/send-change-email-code',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/send-change-email-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/temp-token":{"get":{"description":"Get temp token","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get temp token successfully","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"expiresTime":{"type":"string"}},"required":["accessToken","expiresTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/auth/temp-token \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/temp-token';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/temp-token',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/temp-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/invite-waitlist":{"post":{"description":"Invite waitlist","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"list":{"type":"array","items":{"type":"string","format":"email"}}},"required":["list"]}}}},"responses":{"201":{"description":"Invite waitlist successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string","format":"email"},"code":{"type":"string"},"times":{"type":"number"}},"required":["email","code","times"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/invite-waitlist \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"list\":[\"user@example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/invite-waitlist';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"list\":[\"user@example.com\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/invite-waitlist',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({list: ['user@example.com']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"list\\\":[\\\"user@example.com\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/invite-waitlist\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/waitlist-invite-code":{"post":{"description":"Gen waitlist invite code","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","description":"The number of invite codes to generate","example":10},"times":{"type":"integer","description":"The number of invite codes to use","example":10}},"required":["count","times"]}}}},"responses":{"201":{"description":"Gen waitlist invite code successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"times":{"type":"integer"}},"required":["code","times"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/waitlist-invite-code \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"count\":10,\"times\":10}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/waitlist-invite-code';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"count\":10,\"times\":10}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/waitlist-invite-code',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({count: 10, times: 10}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"count\\\":10,\\\"times\\\":10}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/waitlist-invite-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/join-waitlist":{"post":{"description":"Join waitlist","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"200":{"description":"Join waitlist successfully","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/auth/join-waitlist \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"email\":\"user@example.com\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/join-waitlist';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"email\":\"user@example.com\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/join-waitlist',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/join-waitlist\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/waitlist":{"get":{"description":"Get waitlist","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get waitlist successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string","format":"email"},"invite":{"type":"boolean","nullable":true},"inviteTime":{"type":"string","nullable":true,"format":"date"},"createdTime":{"type":"string","format":"date"}},"required":["email","invite","inviteTime","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/auth/waitlist \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/waitlist';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/auth/waitlist',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/waitlist\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/connection":{"post":{"description":"Create a db connection url","tags":["db-connection"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"}},"required":["baseId"]}}}},"responses":{"201":{"description":"Connection created successfully","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"dsn":{"type":"object","properties":{"driver":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"db":{"type":"string"},"user":{"type":"string"},"pass":{"type":"string"},"params":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"required":["driver","host"]},"connection":{"type":"object","properties":{"max":{"type":"number"},"current":{"type":"number"}},"required":["max","current"]},"url":{"type":"string","description":"The URL that can be used to connect to the database"}},"required":["dsn","connection","url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/connection \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/connection';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"baseId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/connection',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/connection\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a db connection","tags":["db-connection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/connection \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/connection';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/connection',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/connection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get db connection info","tags":["db-connection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns information about a db connection.","content":{"application/json":{"schema":{"type":"object","properties":{"dsn":{"type":"object","properties":{"driver":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"db":{"type":"string"},"user":{"type":"string"},"pass":{"type":"string"},"params":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"required":["driver","host"]},"connection":{"type":"object","properties":{"max":{"type":"number"},"current":{"type":"number"}},"required":["max","current"]},"url":{"type":"string","description":"The URL that can be used to connect to the database"}},"required":["dsn","connection","url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/connection \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/connection';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/connection',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/connection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/invitation/link/accept":{"post":{"description":"Accept invitation link","tags":["invitation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"invitationCode":{"type":"string"},"invitationId":{"type":"string"}},"required":["invitationCode","invitationId"]}}}},"responses":{"201":{"description":"Successful response, return the spaceId or baseId of the invitation link.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string","nullable":true}},"required":["spaceId","baseId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/invitation/link/accept \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"invitationCode\":\"string\",\"invitationId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/invitation/link/accept';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"invitationCode\":\"string\",\"invitationId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/invitation/link/accept',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({invitationCode: 'string', invitationId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"invitationCode\\\":\\\"string\\\",\\\"invitationId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/invitation/link/accept\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/auth":{"post":{"description":"share view auth password","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":3}},"required":["password"]}}}},"responses":{"201":{"description":"Successfully authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/share/%7BshareId%7D/view/auth \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/auth';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"password\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/auth',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/auth\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view":{"get":{"description":"get share view info","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"share view info","content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string"},"tableId":{"type":"string"},"shareId":{"type":"string"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"view":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"description":"first 50 records"},"extra":{"type":"object","properties":{"groupPoints":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]},"description":"Group points for the view"},"plugin":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","name"]}}}},"required":["tableId","shareId","fields","records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/share/%7BshareId%7D/view \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/aggregations":{"get":{"description":"Get share view aggregations","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"object","properties":{"count":{"type":"array","items":{"type":"string"}},"empty":{"type":"array","items":{"type":"string"}},"filled":{"type":"array","items":{"type":"string"}},"unique":{"type":"array","items":{"type":"string"}},"max":{"type":"array","items":{"type":"string"}},"min":{"type":"array","items":{"type":"string"}},"sum":{"type":"array","items":{"type":"string"}},"average":{"type":"array","items":{"type":"string"}},"checked":{"type":"array","items":{"type":"string"}},"unChecked":{"type":"array","items":{"type":"string"}},"percentEmpty":{"type":"array","items":{"type":"string"}},"percentFilled":{"type":"array","items":{"type":"string"}},"percentUnique":{"type":"array","items":{"type":"string"}},"percentChecked":{"type":"array","items":{"type":"string"}},"percentUnChecked":{"type":"array","items":{"type":"string"}},"earliestDate":{"type":"array","items":{"type":"string"}},"latestDate":{"type":"array","items":{"type":"string"}},"dateRangeOfDays":{"type":"array","items":{"type":"string"}},"dateRangeOfMonths":{"type":"array","items":{"type":"string"}},"totalAttachmentSize":{"type":"array","items":{"type":"string"}}}},"required":false,"name":"field","in":"query"}],"responses":{"200":{"description":"Returns aggregations list of share view.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/row-count":{"get":{"description":"Get row count for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"Row count for the share view","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number"}},"required":["rowCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/records":{"get":{"description":"Get records for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"},"required":false,"description":"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","name":"fieldKeyType","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"Records for the share view","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"example":[{"id":"recXXXXXXX","fields":{"single line text":"text value"}}],"description":"Array of record objects "},"extra":{"type":"object","properties":{"groupPoints":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]},"description":"Group points for the view"},"allGroupHeaderRefs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"depth":{"type":"number","maximum":2,"minimum":0}},"required":["id","depth"]},"description":"All group header refs for the view, including collapsed group headers"},"searchHitIndex":{"type":"array","nullable":true,"items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldId":{"type":"string"}},"required":["recordId","fieldId"]},"description":"The index of the records that match the search, highlight the records"}}}},"required":["records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/form-submit":{"post":{"description":"share form view submit new record","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"typecast":{"type":"boolean"}},"required":["fields"]}}}},"responses":{"201":{"description":"Successfully submit","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/share/%7BshareId%7D/view/form-submit \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/form-submit';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/form-submit',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({fields: {property1: null, property2: null}, typecast: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"typecast\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/form-submit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/copy":{"get":{"description":"Copy operations in Share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"}],"responses":{"200":{"description":"Copy content","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"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."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}},"required":["content","header"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/group-points":{"get":{"description":"Get group points for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Group points for the share view","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/link-records":{"get":{"description":"In a view with a field selector, link the records list of the associated field selector to get the. Linking the desired ones inside the share view should fetch the ones that have already been selected.","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["candidate","selected"],"description":"Only used for plugin views"},"required":false,"description":"Only used for plugin views","name":"type","in":"query"}],"responses":{"200":{"description":"Link records list","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/collaborators":{"get":{"description":"View collaborators in a view with a user field selector.","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"fieldId","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":false,"name":"type","in":"query"}],"responses":{"200":{"description":" view collaborators","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["userId","userName","email"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/search-count":{"get":{"description":"Get share view search result count with query","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Share view Search count with query","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/search-index":{"get":{"description":"Get share view record index with search query","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"share view record index with search query","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"type":"object","properties":{"index":{"type":"number"},"fieldId":{"type":"string"},"recordId":{"type":"string"}},"required":["index","fieldId","recordId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/calendar-daily-collection":{"get":{"description":"Get calendar daily collection for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDateFieldId","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDateFieldId","in":"query"}],"responses":{"200":{"description":"Calendar daily collection for the share view","content":{"application/json":{"schema":{"type":"object","properties":{"countMap":{"type":"object","additionalProperties":{"type":"number"}},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}},"required":["countMap","records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/record/{recordId}/{fieldId}/button-click":{"post":{"summary":"Button click","description":"Button click","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the clicked cell","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string"},"tableId":{"type":"string"},"fieldId":{"type":"string"},"record":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}},"required":["runId","tableId","fieldId","record"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications":{"get":{"description":"List a user notification","tags":["notification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["unread","read"]},"required":true,"name":"notifyStates","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Successful response, return user notification list.","content":{"application/json":{"schema":{"type":"object","properties":{"notifications":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"notifyIcon":{"anyOf":[{"type":"object","properties":{"iconUrl":{"type":"string"}},"required":["iconUrl"]},{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"userAvatarUrl":{"type":"string","nullable":true}},"required":["userId","userName"]}]},"notifyType":{"type":"string","enum":["system","collaboratorCellTag","collaboratorMultiRowTag","comment","exportBase"]},"url":{"type":"string"},"message":{"type":"string"},"messageI18n":{"type":"string","nullable":true},"isRead":{"type":"boolean"},"createdTime":{"type":"string"}},"required":["id","notifyIcon","notifyType","url","message","isRead","createdTime"]}},"nextCursor":{"type":"string","nullable":true}},"required":["notifications"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/{notificationId}/status":{"patch":{"description":"Patch notification status","tags":["notification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"notificationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isRead":{"type":"boolean"}},"required":["isRead"]}}}},"responses":{"200":{"description":"Returns successfully patch notification status"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/notifications/%7BnotificationId%7D/status \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"isRead\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/%7BnotificationId%7D/status';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"isRead\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/notifications/%7BnotificationId%7D/status',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({isRead: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isRead\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/notifications/%7BnotificationId%7D/status\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/read-all":{"patch":{"description":"mark all notifications as read","tags":["notification"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/notifications/read-all \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/read-all';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/notifications/read-all',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/notifications/read-all\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/unread-count":{"get":{"description":"User notification unread count","tags":["notification"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response, return user notification unread count.","content":{"application/json":{"schema":{"type":"object","properties":{"unreadCount":{"type":"integer","minimum":0}},"required":["unreadCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/notifications/unread-count \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/unread-count';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/notifications/unread-count',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/notifications/unread-count\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token":{"post":{"description":"Create access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"},"minItems":1},"spaceIds":{"type":"array","nullable":true,"items":{"type":"string"},"minItems":1},"baseIds":{"type":"array","nullable":true,"items":{"type":"string"},"minItems":1},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string","example":"2024-03-25"}},"required":["name","scopes","expiredTime"]}}}},"responses":{"201":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","nullable":true,"items":{"type":"string"}},"baseIds":{"type":"array","nullable":true,"items":{"type":"string"}},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string"},"token":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","name","scopes","expiredTime","token","createdTime","lastUsedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/access-token \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true,\"expiredTime\":\"2024-03-25\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true,\"expiredTime\":\"2024-03-25\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/access-token',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  scopes: ['string'],\n  spaceIds: ['string'],\n  baseIds: ['string'],\n  hasFullAccess: true,\n  expiredTime: '2024-03-25'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"scopes\\\":[\\\"string\\\"],\\\"spaceIds\\\":[\\\"string\\\"],\\\"baseIds\\\":[\\\"string\\\"],\\\"hasFullAccess\\\":true,\\\"expiredTime\\\":\\\"2024-03-25\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/access-token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"List access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","name","scopes","expiredTime","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/access-token \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/access-token',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/access-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token/{id}/refresh":{"post":{"description":"Refresh access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expiredTime":{"type":"string"}},"required":["expiredTime"]}}}},"responses":{"201":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"expiredTime":{"type":"string"},"token":{"type":"string"}},"required":["id","expiredTime","token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/access-token/%7Bid%7D/refresh \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"expiredTime\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D/refresh';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"expiredTime\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/access-token/%7Bid%7D/refresh',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({expiredTime: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"expiredTime\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/access-token/%7Bid%7D/refresh\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token/{id}":{"delete":{"description":"Delete access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Access token deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/access-token/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/access-token/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","nullable":true,"items":{"type":"string"}},"baseIds":{"type":"array","nullable":true,"items":{"type":"string"}},"hasFullAccess":{"type":"boolean"}},"required":["name","scopes"]}}}},"responses":{"200":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"hasFullAccess":{"type":"boolean"}},"required":["id","name","scopes"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/access-token/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  scopes: ['string'],\n  spaceIds: ['string'],\n  baseIds: ['string'],\n  hasFullAccess: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"scopes\\\":[\\\"string\\\"],\\\"spaceIds\\\":[\\\"string\\\"],\\\"baseIds\\\":[\\\"string\\\"],\\\"hasFullAccess\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/access-token/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","name","scopes","expiredTime","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/access-token/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/access-token/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/analyze":{"get":{"description":"Get a column info from analyze sheet","tags":["import"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"attachmentUrl","in":"query"},{"schema":{"type":"string","enum":["csv","excel"]},"required":true,"name":"fileType","in":"query"}],"responses":{"200":{"description":"Returns columnHeader analyze from file","content":{"application/json":{"schema":{"type":"object","properties":{"worksheets":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"name":{"type":"string"}},"required":["type","name"]}}},"required":["name","columns"]}}},"required":["worksheets"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/{baseId}":{"post":{"description":"create table from file","tags":["import"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"worksheets":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"name":{"type":"string"},"sourceColumnIndex":{"type":"number"}},"required":["type","name","sourceColumnIndex"]}},"useFirstRowAsHeader":{"type":"boolean"},"importData":{"type":"boolean"}},"required":["name","columns","useFirstRowAsHeader","importData"]}},"attachmentUrl":{"type":"string"},"fileType":{"type":"string","enum":["csv","excel"]},"notification":{"type":"boolean"},"tz":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["worksheets","attachmentUrl","fileType","tz"]}}}},"responses":{"201":{"description":"Returns data about a table without records","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"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":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/import/%7BbaseId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"worksheets\":{\"property1\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true},\"property2\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true}},\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"notification\":true,\"tz\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/%7BbaseId%7D';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"worksheets\":{\"property1\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true},\"property2\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true}},\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"notification\":true,\"tz\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/import/%7BbaseId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  worksheets: {\n    property1: {\n      name: 'string',\n      columns: [{type: 'singleLineText', name: 'string', sourceColumnIndex: 0}],\n      useFirstRowAsHeader: true,\n      importData: true\n    },\n    property2: {\n      name: 'string',\n      columns: [{type: 'singleLineText', name: 'string', sourceColumnIndex: 0}],\n      useFirstRowAsHeader: true,\n      importData: true\n    }\n  },\n  attachmentUrl: 'string',\n  fileType: 'csv',\n  notification: true,\n  tz: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"worksheets\\\":{\\\"property1\\\":{\\\"name\\\":\\\"string\\\",\\\"columns\\\":[{\\\"type\\\":\\\"singleLineText\\\",\\\"name\\\":\\\"string\\\",\\\"sourceColumnIndex\\\":0}],\\\"useFirstRowAsHeader\\\":true,\\\"importData\\\":true},\\\"property2\\\":{\\\"name\\\":\\\"string\\\",\\\"columns\\\":[{\\\"type\\\":\\\"singleLineText\\\",\\\"name\\\":\\\"string\\\",\\\"sourceColumnIndex\\\":0}],\\\"useFirstRowAsHeader\\\":true,\\\"importData\\\":true}},\\\"attachmentUrl\\\":\\\"string\\\",\\\"fileType\\\":\\\"csv\\\",\\\"notification\\\":true,\\\"tz\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/import/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/{baseId}/{tableId}":{"patch":{"description":"import table inplace","tags":["import"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachmentUrl":{"type":"string"},"fileType":{"type":"string","enum":["csv","excel"]},"insertConfig":{"type":"object","properties":{"sourceWorkSheetKey":{"type":"string"},"excludeFirstRow":{"type":"boolean"},"sourceColumnMap":{"type":"object","additionalProperties":{"type":"number","nullable":true}}},"required":["sourceWorkSheetKey","excludeFirstRow","sourceColumnMap"]},"notification":{"type":"boolean"}},"required":["attachmentUrl","fileType","insertConfig"]}}}},"responses":{"200":{"description":"Successfully import table inplace"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/import/%7BbaseId%7D/%7BtableId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"insertConfig\":{\"sourceWorkSheetKey\":\"string\",\"excludeFirstRow\":true,\"sourceColumnMap\":{\"property1\":0,\"property2\":0}},\"notification\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/%7BbaseId%7D/%7BtableId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"insertConfig\":{\"sourceWorkSheetKey\":\"string\",\"excludeFirstRow\":true,\"sourceColumnMap\":{\"property1\":0,\"property2\":0}},\"notification\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/import/%7BbaseId%7D/%7BtableId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  attachmentUrl: 'string',\n  fileType: 'csv',\n  insertConfig: {\n    sourceWorkSheetKey: 'string',\n    excludeFirstRow: true,\n    sourceColumnMap: {property1: 0, property2: 0}\n  },\n  notification: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachmentUrl\\\":\\\"string\\\",\\\"fileType\\\":\\\"csv\\\",\\\"insertConfig\\\":{\\\"sourceWorkSheetKey\\\":\\\"string\\\",\\\"excludeFirstRow\\\":true,\\\"sourceColumnMap\\\":{\\\"property1\\\":0,\\\"property2\\\":0}},\\\"notification\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/import/%7BbaseId%7D/%7BtableId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/export/{tableId}":{"get":{"description":"export csv from table","tags":["export"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","description":"When ignoreViewQuery is true, use this columnMeta to sort fields by order. Format: { fieldId: { order: number } }"},"required":false,"description":"When ignoreViewQuery is true, use this columnMeta to sort fields by order. Format: { fieldId: { order: number } }","name":"columnMeta","in":"query"}],"responses":{"200":{"description":"Download successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin":{"delete":{"description":"Delete pin","tags":["pin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"required":true,"name":"type","in":"query"},{"schema":{"type":"string"},"required":true,"name":"id","in":"query"}],"responses":{"200":{"description":"Delete pin successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/":{"post":{"description":"Add pin","tags":["pin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"id":{"type":"string"}},"required":["type","id"]}}}},"responses":{"201":{"description":"Add pin successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/pin/ \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"space\",\"id\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"space\",\"id\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/pin/',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({type: 'space', id: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"space\\\",\\\"id\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/pin/\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/list":{"get":{"description":"Get  pin list","tags":["pin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get  pin list, include base pin","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"order":{"type":"number"},"name":{"type":"string"},"icon":{"type":"string"},"parentBaseId":{"type":"string"},"viewMeta":{"type":"object","properties":{"tableId":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"pluginLogo":{"type":"string"}},"required":["tableId","type"]}},"required":["id","type","order","name"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/pin/list \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/pin/list',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/pin/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/order":{"put":{"description":"Update  pin order","tags":["pin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"anchorId":{"type":"string"},"anchorType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"position":{"type":"string","enum":["before","after"]}},"required":["id","type","anchorId","anchorType","position"]}}}},"responses":{"200":{"description":"Update  pin order successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/pin/order \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"id\":\"string\",\"type\":\"space\",\"anchorId\":\"string\",\"anchorType\":\"space\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/order';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"id\":\"string\",\"type\":\"space\",\"anchorId\":\"string\",\"anchorType\":\"space\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/pin/order',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  id: 'string',\n  type: 'space',\n  anchorId: 'string',\n  anchorType: 'space',\n  position: 'before'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"id\\\":\\\"string\\\",\\\"type\\\":\\\"space\\\",\\\"anchorId\\\":\\\"string\\\",\\\"anchorType\\\":\\\"space\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/pin/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/summary":{"get":{"description":"Retrieves a summary of subscription information for a space","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns a summary of subscription information about a space.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["spaceId","status","level"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/summary \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/subscription/summary',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/subscription/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/summary":{"get":{"description":"Retrieves a summary of subscription information across all spaces","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns a summary of subscription information for each space.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["spaceId","status","level"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/billing/subscription/summary \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/billing/subscription/summary',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/usage":{"get":{"description":"Get usage information for the space","tags":["usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns usage information for the space.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","limit"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/usage \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/usage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/usage',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/instance/usage":{"get":{"description":"Get usage information for the instance","tags":["usage"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns usage information for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","limit"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/instance/usage \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/instance/usage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/instance/usage',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/instance/usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/usage":{"get":{"description":"Get usage information for the base","tags":["usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns usage information for the base.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","limit"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/usage \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/usage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/usage',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}":{"get":{"description":"Get the OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"Returns the OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client/%7BclientId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/client/%7BclientId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete an OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"OAuth application deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client/%7BclientId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/oauth/client/%7BclientId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update an OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}},"responses":{"200":{"description":"Returns the updated OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"clientId\":\"string\",\"name\":\"string\",\"secrets\":[{\"id\":\"string\",\"secret\":\"string\",\"lastUsedTime\":\"string\"}],\"scopes\":[\"string\"],\"logo\":\"http://example.com\",\"homepage\":\"http://example.com\",\"redirectUris\":[\"http://example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"clientId\":\"string\",\"name\":\"string\",\"secrets\":[{\"id\":\"string\",\"secret\":\"string\",\"lastUsedTime\":\"string\"}],\"scopes\":[\"string\"],\"logo\":\"http://example.com\",\"homepage\":\"http://example.com\",\"redirectUris\":[\"http://example.com\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client/%7BclientId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  clientId: 'string',\n  name: 'string',\n  secrets: [{id: 'string', secret: 'string', lastUsedTime: 'string'}],\n  scopes: ['string'],\n  logo: 'http://example.com',\n  homepage: 'http://example.com',\n  redirectUris: ['http://example.com']\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"clientId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"secrets\\\":[{\\\"id\\\":\\\"string\\\",\\\"secret\\\":\\\"string\\\",\\\"lastUsedTime\\\":\\\"string\\\"}],\\\"scopes\\\":[\\\"string\\\"],\\\"logo\\\":\\\"http://example.com\\\",\\\"homepage\\\":\\\"http://example.com\\\",\\\"redirectUris\\\":[\\\"http://example.com\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/oauth/client/%7BclientId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client":{"post":{"description":"Create a new OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"homepage":{"type":"string","format":"uri"},"logo":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["table|create","table|delete","table|export","table|import","table|read","table|update","table|trash_read","table|trash_update","table|trash_reset","view|create","view|delete","view|read","view|update","field|create","field|delete","field|read","field|update","record|comment","record|create","record|delete","record|read","record|update","automation|create","automation|delete","automation|read","automation|update","user|email_read","user|integrations"]}},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"minItems":1}},"required":["name","homepage","redirectUris"]}}}},"responses":{"201":{"description":"Returns the created OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/oauth/client \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"homepage\":\"http://example.com\",\"logo\":\"string\",\"scopes\":[\"table|create\"],\"redirectUris\":[\"http://example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"homepage\":\"http://example.com\",\"logo\":\"string\",\"scopes\":[\"table|create\"],\"redirectUris\":[\"http://example.com\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  homepage: 'http://example.com',\n  logo: 'string',\n  scopes: ['table|create'],\n  redirectUris: ['http://example.com']\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"homepage\\\":\\\"http://example.com\\\",\\\"logo\\\":\\\"string\\\",\\\"scopes\\\":[\\\"table|create\\\"],\\\"redirectUris\\\":[\\\"http://example.com\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/oauth/client\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get the list of OAuth applications","tags":["oauth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of OAuth applications","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"}},"required":["clientId","name","homepage"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/oauth/client \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/client\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/revoke-token":{"post":{"tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"Revoke token successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-token \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-token';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client/%7BclientId%7D/revoke-token',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/revoke-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/secret/{secretId}":{"delete":{"description":"Delete the OAuth secret","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"secretId","in":"path"}],"responses":{"200":{"description":"OAuth secret deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/secret":{"post":{"description":"Generate a new OAuth secret","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"201":{"description":"Returns the generated OAuth secret","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"maskedSecret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret","maskedSecret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client/%7BclientId%7D/secret',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/secret\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/decision/{transactionId}":{"get":{"description":"Get the OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"transactionId","in":"path"}],"responses":{"200":{"description":"Returns the OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"homepage":{"type":"string","format":"uri"},"logo":{"type":"string","format":"uri"},"scopes":{"type":"array","items":{"type":"string"}}},"required":["name","homepage"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/oauth/decision/%7BtransactionId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/decision/%7BtransactionId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/decision/%7BtransactionId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/decision/%7BtransactionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/revoke-access":{"post":{"tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"201":{"description":"Revoke access permission successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-access \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-access';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client/%7BclientId%7D/revoke-access',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/revoke-access\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/authorized/list":{"get":{"description":"Get the list of authorized applications","tags":["oauth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of authorized applications","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"homepage":{"type":"string","format":"uri"},"logo":{"type":"string","format":"uri"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"lastUsedTime":{"type":"string"},"createdUser":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"}},"required":["name","email"]}},"required":["clientId","name","homepage","createdUser"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/oauth/client/authorized/list \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/authorized/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/oauth/client/authorized/list',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/client/authorized/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/undo-redo/undo":{"post":{"description":"Undo the last operation","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"201":{"description":"Returns data about the undo operation.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["fulfilled","failed","empty"]},"errorMessage":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/undo \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/undo';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/undo-redo/undo',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/undo-redo/undo\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/undo-redo/redo":{"post":{"description":"Redo the last operation","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"201":{"description":"Returns data about the redo operation.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["fulfilled","failed","empty"]},"errorMessage":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/redo \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/redo';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/undo-redo/redo',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/undo-redo/redo\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/{commentId}/reaction":{"post":{"description":"create record comment reaction","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reaction":{"type":"string"}},"required":["reaction"]}}}},"responses":{"201":{"description":"Successfully create comment reaction."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"reaction\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"reaction\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({reaction: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"reaction\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete record comment reaction","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reaction":{"type":"string"}},"required":["reaction"]}}}},"responses":{"200":{"description":"Successfully delete comment reaction."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"reaction\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction';\nconst options = {\n  method: 'DELETE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"reaction\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({reaction: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"reaction\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"DELETE\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/{commentId}":{"get":{"description":"Get record comment detail","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Returns the record's comment detail","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]},"reaction":{"type":"array","nullable":true,"items":{"type":"object","properties":{"reaction":{"type":"string"},"user":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]}}},"required":["reaction","user"]}},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"quoteId":{"type":"string"},"deletedTime":{"type":"string"}},"required":["id","content","createdBy","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"update record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}}},"required":["content"]}}}},"responses":{"200":{"description":"Successfully update comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  content: [{type: 'p', value: null, children: [{type: 'span', value: 'string'}]}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"content\\\":[{\\\"type\\\":\\\"p\\\",\\\"value\\\":null,\\\"children\\\":[{\\\"type\\\":\\\"span\\\",\\\"value\\\":\\\"string\\\"}]}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"responses":{"200":{"description":"Successfully delete comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/list":{"get":{"description":"Get record comment list","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":20,"example":20,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"required":false,"name":"includeCursor","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["forward"]},{"type":"string","enum":["backward"]}]},"required":false,"name":"direction","in":"query"}],"responses":{"200":{"description":"Returns the list of record's comment","content":{"application/json":{"schema":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]},"reaction":{"type":"array","nullable":true,"items":{"type":"object","properties":{"reaction":{"type":"string"},"user":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]}}},"required":["reaction","user"]}},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"quoteId":{"type":"string"},"deletedTime":{"type":"string"}},"required":["id","content","createdBy","createdTime"]}},"nextCursor":{"type":"string","nullable":true}},"required":["comments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/create":{"post":{"description":"create record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"quoteId":{"type":"string","nullable":true},"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}}},"required":["content"]}}}},"responses":{"201":{"description":"Successfully create comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/create \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"quoteId\":\"string\",\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/create';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"quoteId\":\"string\",\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/create',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  quoteId: 'string',\n  content: [{type: 'p', value: null, children: [{type: 'span', value: 'string'}]}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"quoteId\\\":\\\"string\\\",\\\"content\\\":[{\\\"type\\\":\\\"p\\\",\\\"value\\\":null,\\\"children\\\":[{\\\"type\\\":\\\"span\\\",\\\"value\\\":\\\"string\\\"}]}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/subscribe":{"post":{"description":"subscribe record comment's active","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"201":{"description":"Successfully subscribe record comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"unsubscribe record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Successfully subscribe record comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"get record comment subscribe detail","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Successfully get record comment subscribe detail.","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"tableId":{"type":"string"},"recordId":{"type":"string"},"createdBy":{"type":"string"}},"required":["tableId","recordId","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/attachment/{path}":{"get":{"description":"Get record comment attachment url","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Returns the record's comment attachment url","content":{"application/json":{"schema":{"type":"string"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/count":{"get":{"description":"Get record comment counts by query","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"},"required":false,"description":"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","name":"fieldKeyType","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"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."},"required":false,"description":"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.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"Returns the comment counts by query","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"recordId":{"type":"string"},"count":{"type":"number"}},"required":["recordId","count"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/count":{"get":{"description":"Get record comment count","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns the comment count by query","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/count \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/count';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/count',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/count\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/me":{"get":{"description":"Get my organization","tags":["organization"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get my organization successfully","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["id","name","isAdmin"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/organization/me \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/me';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/me',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/me\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/department":{"get":{"tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"parentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"}],"responses":{"200":{"description":"Get department list successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}},"hasChildren":{"type":"boolean"}},"required":["id","name","hasChildren"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/department-user":{"get":{"tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"departmentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":0},"required":false,"name":"skip","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":50},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Get department users successfully","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}}},"required":["id","name"]}}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/api/{baseId}/ai/generate-stream":{"post":{"description":"Generate ai stream","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string"},"task":{"type":"string","enum":["coding","embedding","translation"],"description":"Quick model selection via predefined task type","example":"coding"},"modelKey":{"type":"string","description":"Specify an exact model configuration to use","example":"openai@gpt-4o@custom-name"}},"required":["prompt"]}}}},"responses":{"201":{"description":"Returns ai generate stream.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate-stream \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate-stream';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/api/%7BbaseId%7D/ai/generate-stream',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({prompt: 'string', task: 'coding', modelKey: 'openai@gpt-4o@custom-name'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"prompt\\\":\\\"string\\\",\\\"task\\\":\\\"coding\\\",\\\"modelKey\\\":\\\"openai@gpt-4o@custom-name\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/api/%7BbaseId%7D/ai/generate-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/{baseId}/ai/config":{"get":{"description":"Get the configuration of ai, including instance and space configuration","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the configuration of ai.","content":{"application/json":{"schema":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"modelDefinationMap":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"inputRate":{"type":"number","example":0.001,"description":"The number of credits spent using a prompt token"},"outputRate":{"type":"number","example":0.0025,"description":"The number of credits spent using a completion token"},"visionEnable":{"type":"boolean","description":"Whether to enable vision"},"audioEnable":{"type":"boolean","description":"Whether to enable audio"},"videoEnable":{"type":"boolean","description":"Whether to enable video"},"deepThinkEnable":{"type":"boolean","description":"Whether to enable deep think"}},"required":["inputRate","outputRate"]},{"type":"object","properties":{"usagePerUnit":{"type":"number","example":100,"description":"The number of credits spent for generating one image"},"outputType":{"type":"string","enum":["image","audio","video"]}},"required":["usagePerUnit","outputType"]}]}},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}}}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/%7BbaseId%7D/ai/config \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/%7BbaseId%7D/ai/config';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/%7BbaseId%7D/ai/config',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/%7BbaseId%7D/ai/config\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/{baseId}/ai/disable-ai-actions":{"get":{"description":"Get the disable ai actions","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the configuration of ai.","content":{"application/json":{"schema":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}},"required":["disableActions"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/%7BbaseId%7D/ai/disable-ai-actions \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/%7BbaseId%7D/ai/disable-ai-actions';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/%7BbaseId%7D/ai/disable-ai-actions',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/%7BbaseId%7D/ai/disable-ai-actions\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/integrity/base/{baseId}/link-check":{"get":{"description":"Check integrity of link fields in a base","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"}],"responses":{"200":{"description":"Returns integrity check results for the base","content":{"application/json":{"schema":{"type":"object","properties":{"hasIssues":{"type":"boolean"},"linkFieldIssues":{"type":"array","items":{"type":"object","properties":{"baseId":{"type":"string","description":"The base id of the link field with is cross-base"},"baseName":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ForeignTableNotFound","ForeignKeyNotFound","SelfKeyNotFound","SymmetricFieldNotFound","MissingRecordReference","InvalidLinkReference","ForeignKeyHostTableNotFound","ReferenceFieldNotFound","UniqueIndexNotFound","EmptyString"]},"message":{"type":"string"},"fieldId":{"type":"string"},"tableId":{"type":"string"}},"required":["type","message","fieldId"]}}},"required":["issues"]}}},"required":["hasIssues","linkFieldIssues"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/integrity/base/{baseId}/link-fix?tableId={tableId}":{"post":{"description":"Fix integrity of link fields in a base","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ForeignTableNotFound","ForeignKeyNotFound","SelfKeyNotFound","SymmetricFieldNotFound","MissingRecordReference","InvalidLinkReference","ForeignKeyHostTableNotFound","ReferenceFieldNotFound","UniqueIndexNotFound","EmptyString"]},"message":{"type":"string"},"fieldId":{"type":"string"},"tableId":{"type":"string"}},"required":["type","message","fieldId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}":{"get":{"description":"Get a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"responses":{"200":{"description":"Plugin panel retrieved successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"responses":{"200":{"description":"Plugin panel deleted successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel":{"post":{"description":"Create a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Plugin panel created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get all plugin panels","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Plugin panels retrieved successfully.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-panel\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/rename":{"patch":{"description":"Rename a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Plugin panel updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/layout":{"patch":{"description":"Update the layout of a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["layout"]}}}},"responses":{"200":{"description":"The layout of the plugin panel was updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["id","layout"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({layout: [{pluginInstallId: 'string', x: 0, y: 0, w: 0, h: 0}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"layout\\\":[{\\\"pluginInstallId\\\":\\\"string\\\",\\\"x\\\":0,\\\"y\\\":0,\\\"w\\\":0,\\\"h\\\":0}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/install":{"post":{"description":"Install a plugin to a table plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["pluginId"]}}}},"responses":{"201":{"description":"Plugin installed successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"}},"required":["name","pluginId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{pluginInstallId}":{"delete":{"description":"Remove a plugin from a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin removed from plugin panel successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a plugin in plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"name":{"type":"string"},"tableId":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["baseId","name","tableId","pluginId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin in a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Plugin renamed successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{pluginInstallId}/update-storage":{"patch":{"description":"Update storage of a plugin in a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Storage updated successfully.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"nullable":true}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/duplicate":{"post":{"description":"Duplicate a plugin panel","summary":"Duplicate a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated plugin panel info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{installedId}/duplicate":{"post":{"description":"Duplicate a dashboard installed plugin","summary":"Duplicate a dashboard installed plugin","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated dashboard info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}":{"get":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Returns data about the plugin context menu.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"tableId":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"positionId":{"type":"string"},"url":{"type":"string"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}}},"required":["name","tableId","pluginId","pluginInstallId","positionId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Remove a plugin context menu","tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin context menu removed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/install":{"post":{"description":"Install a plugin context menu","tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["pluginId"]}}}},"responses":{"201":{"description":"Plugin context menu installed successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"name":{"type":"string"},"order":{"type":"number"}},"required":["pluginInstallId","name","order"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/install \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/install';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-context-menu/install',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-context-menu/install\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/move":{"put":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Plugin context menu moved successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin context menu","tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Plugin context menu renamed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/update-storage":{"put":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Plugin context menu updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"tableId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["tableId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu":{"get":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns a list of plugins","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"name":{"type":"string"},"pluginId":{"type":"string"},"logo":{"type":"string"},"order":{"type":"number"}},"required":["pluginInstallId","name","pluginId","logo","order"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-context-menu',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-context-menu\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/storage":{"get":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin context menu storage retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"tableId":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["name","tableId","pluginId","pluginInstallId","storage"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/{token}":{"get":{"description":"Get unsubscribe information","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["automation","notify","system","verifyCode","resetPassword","invite","common","exportBase","collaboratorCellTag","collaboratorMultiRowTag","notifyMerge","waitlistInvite","automationSendEmailAction"]},"baseId":{"type":"string"},"email":{"type":"string"},"subscriptionStatus":{"type":"boolean"}},"required":["type","baseId","email"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/unsubscribe/%7Btoken%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/%7Btoken%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/unsubscribe/%7Btoken%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/unsubscribe/%7Btoken%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Update subscription status","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"subscriptionStatus":{"type":"boolean"}},"required":["subscriptionStatus"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/unsubscribe/%7Btoken%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"subscriptionStatus\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/%7Btoken%7D';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"subscriptionStatus\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/unsubscribe/%7Btoken%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({subscriptionStatus: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"subscriptionStatus\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/unsubscribe/%7Btoken%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/list/{baseId}":{"get":{"description":"Get paginated unsubscribe list by baseId","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated unsubscribe list.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["empty"]},"sourceMetaData":{"nullable":true}},"required":["email","createdTime","sourceType","sourceMetaData"]},{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["legacy"]},"sourceMetaData":{"nullable":true}},"required":["email","createdTime","sourceType","sourceMetaData"]},{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["import"]},"sourceMetaData":{"nullable":true}},"required":["email","createdTime","sourceType","sourceMetaData"]},{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["emailLink"]},"sourceMetaData":{"type":"object","properties":{"type":{"type":"string","enum":["automationSendEmailAction"]},"workflow":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"action":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"}},"required":["id","type","category"]}},"required":["type","action"]}},"required":["email","createdTime","sourceType","sourceMetaData"]}]}},"hasMore":{"type":"boolean"},"pageSize":{"type":"number"}},"required":["data","hasMore","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/export-list/{baseId}":{"get":{"description":"Export unsubscribe list","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Export unsubscribe list successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/unsubscribe/export-list/%7BbaseId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/export-list/%7BbaseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/unsubscribe/export-list/%7BbaseId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/unsubscribe/export-list/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/import-list/{baseId}":{"post":{"description":"Import unsubscribe list","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]}},"required":["notify"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/unsubscribe/import-list/%7BbaseId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/import-list/%7BbaseId%7D';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/unsubscribe/import-list/%7BbaseId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  notify: {\n    token: 'xxxxxxxxxxx',\n    size: 1024,\n    url: '/bucket/xxxxx',\n    path: '/table/xxxxxx',\n    mimetype: 'video/mp4',\n    width: 100,\n    height: 100,\n    presignedUrl: 'string'\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/unsubscribe/import-list/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/{nodeId}":{"get":{"description":"Get nodes for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Nodes","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"icon":{"type":"string"}}}}}},"responses":{"200":{"description":"Updated node","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Deleted node Successfully","content":{"application/json":{"schema":{"type":"object","properties":{"resourceId":{"type":"string"},"resourceType":{"type":"string"},"permanent":{"type":"boolean"}},"required":["resourceId","resourceType"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/tree":{"get":{"description":"Get tree nodes for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Nodes","content":{"application/json":{"schema":{"type":"object","properties":{"nodes":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}},"maxFolderDepth":{"type":"number"}},"required":["nodes","maxFolderDepth"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/tree \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/tree';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/tree',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/node/tree\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/list":{"get":{"description":"Get list nodes of a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"List nodes","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/list \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/list',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/node/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/{nodeId}/move":{"put":{"description":"Move or reorder a node","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"parentId":{"type":"string","nullable":true},"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}}}}}},"responses":{"200":{"description":"Updated node info","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"parentId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"parentId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({parentId: 'string', anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"parentId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/folder":{"post":{"description":"Create a folder node in base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Created folder node","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/folder',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node/folder\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node":{"post":{"description":"Create a hierarchical node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string","enum":["folder"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["table"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"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":{"type":"string","nullable":true,"description":"The description of the table."},"icon":{"type":"string","nullable":true,"format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"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":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"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."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"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":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"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"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["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"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["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})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"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":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"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":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"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":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"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"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["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"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["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":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"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\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"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","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]},"description":"The fields of the table. If it is empty, 3 fields include SingleLineText, Number, SingleSelect will and 3 empty records be generated by default."},"views":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["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"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"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":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]},"description":"The views of the table. If it is empty, a grid view will be generated by default."},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"example":[{"fields":{"single line text":"text value"}}],"description":"The record data of the table. If it is empty, 3 empty records will be generated by default."},"order":{"type":"number"},"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"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"}},"required":["resourceType","fields","views"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["dashboard"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string"}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["workflow"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["app"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]}]}}}},"responses":{"200":{"description":"Created node","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"resourceType\":\"folder\",\"parentId\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"resourceType\":\"folder\",\"parentId\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({resourceType: 'folder', parentId: 'string', name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"resourceType\\\":\\\"folder\\\",\\\"parentId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/{nodeId}/duplicate":{"post":{"description":"Duplicate a node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"includeRecords":{"type":"boolean"}},"required":["name","includeRecords"]},{"type":"object","properties":{"name":{"type":"string"}}},{"type":"object","properties":{"name":{"type":"string"}}}]}}}},"responses":{"200":{"description":"Duplicated node","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"includeRecords\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"includeRecords\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', includeRecords: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"includeRecords\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/{nodeId}/permanent":{"delete":{"description":"Permanent delete a node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Permanent deleted node Successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/folder/{folderId}":{"patch":{"description":"Rename a node folder","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"folderId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Updated node folder","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a node folder and move its children to parent","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"folderId","in":"path"}],"responses":{"200":{"description":"Deleted folder node (for client side cleanup)"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share":{"post":{"description":"Create a base share link","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"password":{"type":"string","nullable":true,"minLength":3}},"required":["nodeId"]}}}},"responses":{"201":{"description":"Returns the created base share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/share \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"nodeId\":\"string\",\"allowSave\":true,\"allowCopy\":true,\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"nodeId\":\"string\",\"allowSave\":true,\"allowCopy\":true,\"password\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/share',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({nodeId: 'string', allowSave: true, allowCopy: true, password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"nodeId\\\":\\\"string\\\",\\\"allowSave\\\":true,\\\"allowCopy\\\":true,\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/share\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get all shared node IDs for a base","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns list of shared node IDs","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"nodeId":{"type":"string"}},"required":["nodeId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/share \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/share',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share/{shareId}":{"patch":{"description":"Update a base share link","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"},"password":{"type":"string","nullable":true,"minLength":3}}}}}},"responses":{"200":{"description":"Returns the updated base share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"allowSave\":true,\"allowCopy\":true,\"enabled\":true,\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"allowSave\":true,\"allowCopy\":true,\"enabled\":true,\"password\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({allowSave: true, allowCopy: true, enabled: true, password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"allowSave\\\":true,\\\"allowCopy\\\":true,\\\"enabled\\\":true,\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a base share link","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Successfully deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share/{shareId}/refresh":{"post":{"description":"Refresh/regenerate a base share link ID","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the refreshed base share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/base":{"get":{"description":"Get shared base information","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the shared base information","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareMeta":{"type":"object","properties":{"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true}},"required":["password","nodeId","allowSave","allowCopy"]},"defaultUrl":{"type":"string"}},"required":["baseId","shareMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/share/%7BshareId%7D/base \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/base',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share/node/{nodeId}":{"get":{"description":"Get a base share by node ID","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Returns the base share for the specified node","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/base/auth":{"post":{"description":"Authenticate with password to access shared base","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":3}},"required":["password"]}}}},"responses":{"201":{"description":"Successfully authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/share/%7BshareId%7D/base/auth \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base/auth';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"password\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/base/auth',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/base/auth\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/base/copy":{"post":{"description":"Copy a shared base to a target space","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The target space ID to copy the base to"},"name":{"type":"string","description":"The name of the copied base"},"withRecords":{"type":"boolean","default":true,"description":"Whether to copy records"},"baseId":{"type":"string","description":"The target base ID to copy into. If provided, tables will be added to the existing base instead of creating a new one."}},"required":["spaceId"]}}}},"responses":{"200":{"description":"Returns the copied base","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/share/%7BshareId%7D/base/copy \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"spaceId\":\"string\",\"name\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base/copy';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"spaceId\":\"string\",\"name\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/share/%7BshareId%7D/base/copy',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', name: 'string', withRecords: true, baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/base/copy\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations":{"get":{"description":"Get user integration list","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["slack"],"description":"Filter by provider"},"required":false,"description":"Filter by provider","name":"provider","in":"query"}],"responses":{"200":{"description":"Returns the list of user integration.","content":{"application/json":{"schema":{"type":"object","properties":{"integrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"provider":{"type":"string","enum":["slack"]},"name":{"type":"string"},"lastUsedTime":{"type":"string"},"createdTime":{"type":"string"},"connectedTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"hasSecret":{"type":"boolean"},"metadata":{"anyOf":[{"type":"object","properties":{"userInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"}},"required":["id","name","email"]},"teamInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["userInfo","teamInfo"]}]}},"required":["id","userId","provider","name","createdTime","hasSecret","metadata"]}}},"required":["integrations"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/user-integrations?provider=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations?provider=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user-integrations?provider=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user-integrations?provider=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/{integrationId}":{"delete":{"description":"Delete user integration","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/user-integrations/%7BintegrationId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/%7BintegrationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user-integrations/%7BintegrationId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/user-integrations/%7BintegrationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/{integrationId}/name":{"put":{"description":"Update user integration name","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Updated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/user-integrations/%7BintegrationId%7D/name \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/%7BintegrationId%7D/name';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/user-integrations/%7BintegrationId%7D/name',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/user-integrations/%7BintegrationId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/action/{actionId}":{"get":{"description":"get a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets, <br> for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"update a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"}}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets, <br> for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/action":{"post":{"description":"Create a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"parentNodeId":{"type":"string","description":"witch node this the parent, if not provided, it is a root node"},"type":{"type":"string","enum":["sendEmail","createRecord","updateRecord","httpRequest","getRecords","aiGenerate","script"],"description":"type of action"}},"required":["parentNodeId","type"]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets, <br> for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"sendEmail\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"sendEmail\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  config: null,\n  parentNodeId: 'string',\n  type: 'sendEmail'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"parentNodeId\\\":\\\"string\\\",\\\"type\\\":\\\"sendEmail\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate":{"post":{"description":"duplicate a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Successful duplicate","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets, <br> for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/action/{actionId}/script-input":{"get":{"description":"Get script integrations for a workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Script integrations data","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"integrations":{"type":"object","additionalProperties":{"nullable":true}},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/logic/{logicId}":{"get":{"description":"get a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"logicId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"conditions":{"type":"object"}},"required":["conditions"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"fact":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["fact"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["Repeat"],"description":"Actions in this group will repeat for each item in the input list."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"update a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"}}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"conditions":{"type":"object"}},"required":["conditions"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"fact":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["fact"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["Repeat"],"description":"Actions in this group will repeat for each item in the input list."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/logic":{"post":{"description":"Create a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"parentNodeId":{"type":"string","description":"witch node this the parent, if not provided, it is a root node"},"type":{"type":"string","enum":["condition","Repeat"],"description":"type of logic"}},"required":["parentNodeId","type"]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"type":"object","properties":{"logic":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"conditions":{"type":"object"}},"required":["conditions"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"fact":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["fact"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["Repeat"],"description":"Actions in this group will repeat for each item in the input list."}},"required":["config","id","category","type"]}]},"controls":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"config":{"type":"object","properties":{"sourceNodeId":{"type":"string"}},"required":["sourceNodeId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["control"]},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["conditionEnd","triggerEnd","repeatEnd"]}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"config":{"type":"object","properties":{"truthy":{"type":"boolean"},"sourceNodeId":{"type":"string"}},"required":["truthy","sourceNodeId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["control"]},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["conditionBranch"],"description":"all logic category is actually a group, so they need a node for end mark"}},"required":["config","id","category","type"]}]},"description":"workflow control nodes, contains the logic branch and the end node"}},"required":["logic","controls"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"condition\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"condition\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  config: null,\n  parentNodeId: 'string',\n  type: 'condition'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"parentNodeId\\\":\\\"string\\\",\\\"type\\\":\\\"condition\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/trigger/{triggerId}":{"get":{"description":"get a automation workflow trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"triggerId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"update a automation workflow trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"triggerId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"}}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"type":"object"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/trigger":{"post":{"description":"Create a automation workflow trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"type":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"],"description":"type of trigger"}},"required":["type"]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"type":"object"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null, type: 'recordCreated'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"type\\\":\\\"recordCreated\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/trigger/{triggerId}/generate-webhook-token":{"post":{"description":"Generate a new webhook token for the trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"triggerId","in":"path"}],"responses":{"200":{"description":"Successfully generated webhook token","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"secret":{"type":"string"}},"required":["token","secret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}":{"get":{"description":"get a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the base id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]},"description":"edges of the nodes"},"nodes":{"type":"array","items":{"type":"object"},"description":"nodes list include trigger and actions"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"activeUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"],"description":"active user of the workflow"}},"required":["id","baseId","edges","nodes","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"update a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"trigger":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"type":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"],"description":"type of trigger"}},"required":["type"]}}}}}},"responses":{"200":{"description":"Successful updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  trigger: {name: 'string', description: 'string', config: null, type: 'recordCreated'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"trigger\\\":{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"type\\\":\\\"recordCreated\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/active-snapshot":{"get":{"description":"Get the currently active (published) snapshot of a workflow. Returns the version that is actually running, as opposed to the draft version returned by getWorkflow.","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"The active snapshot of the workflow","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the base id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]},"description":"edges of the nodes"},"nodes":{"type":"array","items":{"type":"object"},"description":"nodes list include trigger and actions"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"activeUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"],"description":"active user of the workflow"}},"required":["id","baseId","edges","nodes","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow":{"get":{"description":"get automation workflow list in base","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"onlyFirst","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"category":{"type":"string","enum":["logic","trigger","action","control"]}},"required":["id","type","category"]}}},"required":["id","createdBy","createdTime","nodes"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"trigger":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"type":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"],"description":"type of trigger"}},"required":["type"]}}}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the base id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]},"description":"edges of the nodes"},"nodes":{"type":"array","items":{"type":"object"},"description":"nodes list include trigger and actions"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"activeUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"],"description":"active user of the workflow"}},"required":["id","baseId","edges","nodes","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  trigger: {name: 'string', description: 'string', config: null, type: 'recordCreated'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"trigger\\\":{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"type\\\":\\\"recordCreated\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/active":{"put":{"description":"active or inactive a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["activate","deactivate","discard"],"description":"Method to update the workflow, activate: activate the workflow and apply any draft if exist, deactivate: deactivate the workflow, abort: abort the draft back to the last active workflow."}},"required":["method"]}}}},"responses":{"200":{"description":"Successful updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"method\":\"activate\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"method\":\"activate\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({method: 'activate'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"method\\\":\\\"activate\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/run/{runId}":{"get":{"description":"get automation workflow run list","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"runId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"id of the step"},"status":{"type":"string","enum":["success","failed","running","canceled","pending"]},"nodeId":{"type":"string","description":"id of the node"},"nodeType":{"type":"string","description":"type of the node"},"nodeName":{"type":"string","description":"node name"},"nodeCategory":{"type":"string","description":"node category"},"createdTime":{"type":"string","description":"time when the step was created"},"testedTime":{"type":"string","description":"time when the node was tested"},"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"}},"required":["id","status","nodeId","nodeType","nodeCategory","createdTime"]},"description":"workflow run history"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/run":{"get":{"description":"get automation workflow run history list","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"number","nullable":true,"description":"skip number"},"required":false,"description":"skip number","name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"description":"take number"},"required":false,"description":"take number","name":"take","in":"query"},{"schema":{"type":"string","enum":["success","failed","running","canceled","pending"],"description":"filter by status"},"required":false,"description":"filter by status","name":"status","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number","description":"total number of the runs"},"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"id of the action run"},"status":{"type":"string","enum":["success","failed","running","canceled","pending"]},"errorMsg":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"],"description":"error message of the workflow run"},"spent":{"type":"number","description":"spent of the workflow run"},"createdTime":{"type":"string","description":"started time of the workflow run"}},"required":["id","status","createdTime"]},"description":"workflow run history"}},"required":["rowCount","runs"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/run/summary":{"get":{"description":"get automation workflow run summary statistics","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"totalCount":{"type":"number","description":"total number of runs"},"statusStats":{"type":"object","properties":{"success":{"type":"number"},"failed":{"type":"number"},"running":{"type":"number"},"pending":{"type":"number"},"canceled":{"type":"number"}},"required":["success","failed","running","pending","canceled"],"description":"count of runs by status"},"avgSpent":{"type":"number","description":"average runtime in milliseconds"}},"required":["totalCount","statusStats","avgSpent"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/test/{nodeId}":{"post":{"description":"test a automation workflow node","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordId":{"type":"string","description":"the record id to test"},"sideEffect":{"type":"boolean","description":"whether to test with side effect"},"withDependency":{"type":"boolean","description":"whether to test with dependency"}},"additionalProperties":{"nullable":true}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  recordId: 'string',\n  sideEffect: true,\n  withDependency: true,\n  property1: null,\n  property2: null\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordId\\\":\\\"string\\\",\\\"sideEffect\\\":true,\\\"withDependency\\\":true,\\\"property1\\\":null,\\\"property2\\\":null}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/test-all":{"post":{"description":"test a automation workflow all","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordId":{"type":"string","description":"the record id to test"},"sideEffect":{"type":"boolean","description":"whether to test with side effect"},"withDependency":{"type":"boolean","description":"whether to test with dependency"}},"additionalProperties":{"nullable":true}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  recordId: 'string',\n  sideEffect: true,\n  withDependency: true,\n  property1: null,\n  property2: null\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordId\\\":\\\"string\\\",\\\"sideEffect\\\":true,\\\"withDependency\\\":true,\\\"property1\\\":null,\\\"property2\\\":null}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/order":{"put":{"description":"Update workflow order","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{tableId}/filter-link-records":{"post":{"description":"get automation workflow list in base","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"nullable":true}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data null"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: 'null'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"null\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/duplicate":{"post":{"description":"duplicate a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful duplicate"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/permanent":{"delete":{"summary":"Permanently delete workflow","description":"Permanently delete a workflow and all its data. This action cannot be undone.","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Workflow permanently deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix/status":{"patch":{"description":"Enable authority","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"enabledTime":{"type":"string"}},"required":["id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/status \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"enabled\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/status';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"enabled\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix/status',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({enabled: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"enabled\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix/status\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix":{"get":{"description":"Get authority matrix","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"defaultRole":{"type":"string"},"enabledTime":{"type":"string"},"adminUsers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}}},"required":["id","baseId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update authority matrix","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"defaultRole":{"type":"string","nullable":true}},"required":["defaultRole"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"defaultRole":{"type":"string"},"enabledTime":{"type":"string"}},"required":["id","baseId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"defaultRole\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"defaultRole\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({defaultRole: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"defaultRole\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/authority-matrix\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix/admin-user":{"patch":{"description":"Update admin user","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["userIds"]}}}},"responses":{"200":{"description":"Successful response"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/admin-user \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/admin-user';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"userIds\":[\"string\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix/admin-user',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix/admin-user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role":{"post":{"description":"Add authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"tables":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"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."},"enabledViewIds":{"type":"array","items":{"type":"string"}},"enabled":{"type":"boolean"}},"required":["tableId"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabled":{"type":"boolean"}},"required":["nodeType","nodeId"]}}},"required":["name"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"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."},"createdTime":{"type":"string"},"enabledTime":{"type":"string"}},"required":["authorityMatrixRoleId","tableId","createdTime"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixRoleId":{"type":"string"},"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabledTime":{"type":"string"},"createdTime":{"type":"string"}},"required":["authorityMatrixRoleId","nodeType","nodeId"]}}},"required":["id","name","baseId","createdTime","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"enabled\":true,\"tables\":[{\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabledViewIds\":[\"string\"],\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"enabled\":true,\"tables\":[{\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabledViewIds\":[\"string\"],\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  enabled: true,\n  tables: [\n    {\n      tableId: 'string',\n      disabledActions: ['string'],\n      fieldRecordPermission: [{fieldId: 'string', disabledActions: ['string']}],\n      recordFilter: {},\n      enabledViewIds: ['string'],\n      enabled: true\n    }\n  ],\n  nodes: [{nodeType: 'workflow', nodeId: 'string', enabled: true}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"tables\\\":[{\\\"tableId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"],\\\"fieldRecordPermission\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"]}],\\\"recordFilter\\\":{},\\\"enabledViewIds\\\":[\\\"string\\\"],\\\"enabled\\\":true}],\\\"nodes\\\":[{\\\"nodeType\\\":\\\"workflow\\\",\\\"nodeId\\\":\\\"string\\\",\\\"enabled\\\":true}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/authority-matrix-role\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get authority matrix role list","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name","baseId","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix-role\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}":{"delete":{"description":"Delete authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"responses":{"200":{"description":"Successful response"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"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."},"enabled":{"type":"boolean"}},"required":["authorityMatrixRoleId","tableId"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabled":{"type":"boolean"}},"required":["nodeType","nodeId"]}}},"required":["name"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"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."},"createdTime":{"type":"string"},"enabledTime":{"type":"string"}},"required":["authorityMatrixRoleId","tableId","createdTime"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixRoleId":{"type":"string"},"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabledTime":{"type":"string"},"createdTime":{"type":"string"}},"required":["authorityMatrixRoleId","nodeType","nodeId"]}}},"required":["id","name","baseId","createdTime","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"description\":\"string\",\"tables\":[{\"authorityMatrixRoleId\":\"string\",\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"enabledViewIds\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"description\":\"string\",\"tables\":[{\"authorityMatrixRoleId\":\"string\",\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"enabledViewIds\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  name: 'string',\n  description: 'string',\n  tables: [\n    {\n      authorityMatrixRoleId: 'string',\n      tableId: 'string',\n      disabledActions: ['string'],\n      enabledViewIds: ['string'],\n      fieldRecordPermission: [{fieldId: 'string', disabledActions: ['string']}],\n      recordFilter: {},\n      enabled: true\n    }\n  ],\n  nodes: [{nodeType: 'workflow', nodeId: 'string', enabled: true}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"tables\\\":[{\\\"authorityMatrixRoleId\\\":\\\"string\\\",\\\"tableId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"],\\\"enabledViewIds\\\":[\\\"string\\\"],\\\"fieldRecordPermission\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"]}],\\\"recordFilter\\\":{},\\\"enabled\\\":true}],\\\"nodes\\\":[{\\\"nodeType\\\":\\\"workflow\\\",\\\"nodeId\\\":\\\"string\\\",\\\"enabled\\\":true}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"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."},"createdTime":{"type":"string"},"enabledTime":{"type":"string"}},"required":["authorityMatrixRoleId","tableId","createdTime"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixRoleId":{"type":"string"},"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabledTime":{"type":"string"},"createdTime":{"type":"string"}},"required":["authorityMatrixRoleId","nodeType","nodeId"]}},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name","baseId","createdTime","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/status":{"patch":{"description":"Update authority matrix role status","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRole","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixId":{"type":"string"},"enabledTime":{"type":"string"}},"required":["id","authorityMatrixId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"enabled\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"enabled\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({enabled: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"enabled\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/name":{"patch":{"description":"Update authority matrix role name","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRole","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/description":{"patch":{"description":"Update authority matrix role description","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRole","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"description":{"type":"string"}},"required":["id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"description\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/user":{"patch":{"description":"Update authority matrix role user","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string"}},"departmentIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixId":{"type":"string"},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","authorityMatrixId","users","departments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"userIds\":[\"string\"],\"departmentIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"userIds\":[\"string\"],\"departmentIds\":[\"string\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({userIds: ['string'], departmentIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userIds\\\":[\\\"string\\\"],\\\"departmentIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/duplicate":{"post":{"description":"Duplicate authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"includeUsers":{"type":"boolean"},"includeDepartments":{"type":"boolean"}}}}}},"responses":{"201":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"authorityMatrixRoleId":{"type":"string"}},"required":["baseId","authorityMatrixRoleId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"includeUsers\":true,\"includeDepartments\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"includeUsers\":true,\"includeDepartments\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({includeUsers: true, includeDepartments: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"includeUsers\\\":true,\\\"includeDepartments\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role-table/{tableId}/filter-link-records":{"get":{"description":"Get authority matrix table link records","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/base-products":{"get":{"description":"Get base products list","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns base products list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"trialPeriodInDays":{"type":"number"},"giftCredit":{"type":"number"},"creditSubscribeEnable":{"type":"boolean"},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}}},"required":["id","type","catalog","level","limit","prices"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/billing/base-products \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/base-products';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/billing/base-products',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/base-products\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/add-on-products":{"get":{"description":"Get add-on products list","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns add-on products list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}},"trialPeriodInDays":{"type":"number"}},"required":["id","type","catalog","unitAmount","prices"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/billing/add-on-products \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/add-on-products';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/billing/add-on-products',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/add-on-products\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription":{"get":{"description":"Get subscription detail by spaceId","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns subscription detail.","content":{"application/json":{"schema":{"type":"object","properties":{"base":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"creditSubscribeEnable":{"type":"boolean"},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"quantity":{"type":"number"},"priceId":{"type":"string","nullable":true},"unitAmount":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAt":{"type":"string","nullable":true},"isTrialUsed":{"type":"boolean"},"period":{"type":"string","enum":["month","year","lifetime"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["id","type","catalog","level","limit","status","quantity","priceId","unitAmount","interval","currentPeriodStart","currentPeriodEnd","cancelAt"]},"credit":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]},"rowCount":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]},"attachmentSize":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]},"automationRun":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]}},"required":["base"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/subscription',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/subscription\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Cancel subscription for a space","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"required":true,"name":"type","in":"query"},{"schema":{"type":"string"},"required":false,"name":"successUrl","in":"query"}],"responses":{"200":{"description":"Cancel successfully","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","nullable":true}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing":{"get":{"description":"Get space billing details","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns space billing details.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"plan":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"interval":{"type":"string","enum":["month","year"]},"quantity":{"type":"number"},"unitAmount":{"type":"number"},"usage":{"type":"object","properties":{"numRows":{"type":"number"},"attachmentSize":{"type":"number"},"numDatabaseConnections":{"type":"number"},"numCollaborators":{"type":"number"},"numAutomationSendEmail":{"type":"number"},"numAutomationRuns":{"type":"number"}},"required":["numRows","attachmentSize","numDatabaseConnections","numCollaborators","numAutomationSendEmail","numAutomationRuns"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAt":{"type":"string","nullable":true},"cycleStart":{"type":"string","nullable":true},"cycleEnd":{"type":"string","nullable":true},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"period":{"type":"string","enum":["month","year","lifetime"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","interval","quantity","unitAmount","usage","limit","currentPeriodStart","currentPeriodEnd","cancelAt","status"]},"credit":{"type":"object","properties":{"amount":{"type":"number"},"usedAmount":{"type":"number"},"rewardAmount":{"type":"number","nullable":true}},"required":["amount","usedAmount"]},"detail":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}},"required":["name","email"]}},"required":["spaceId","plan","credit","detail"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/billing \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/invoice/base-list":{"get":{"description":"Get paginated invoice list by spaceId","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Returns paginated invoice list.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","nullable":true},"number":{"type":"string","nullable":true},"amount":{"type":"number"},"currency":{"type":"string"},"createdTime":{"type":"string"},"status":{"type":"string","nullable":true},"pdfUrl":{"type":"string","nullable":true}},"required":["id","number","amount","currency","createdTime","status"]}},"hasMore":{"type":"boolean"},"pageSize":{"type":"number"}},"required":["data","hasMore","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/{licenseId}":{"get":{"description":"Get license details for the self-hosted related subscription","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"licenseId","in":"path"}],"responses":{"200":{"description":"Returns license details for the self-hosted related subscription","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"instanceId":{"type":"string"},"currentPeriodStart":{"type":"string"},"currentPeriodEnd":{"type":"string"},"quantity":{"type":"number"},"unitAmount":{"type":"number"},"licenseKey":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]}},"required":["id","instanceId","currentPeriodStart","currentPeriodEnd","quantity","unitAmount","licenseKey","interval","level"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/billing/subscription/license/%7BlicenseId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/%7BlicenseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/billing/subscription/license/%7BlicenseId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/license/%7BlicenseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license":{"get":{"description":"Get license list","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns license list","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"instanceId":{"type":"string"},"currentPeriodStart":{"type":"string"},"currentPeriodEnd":{"type":"string"},"quantity":{"type":"number"},"unitAmount":{"type":"number"},"licenseKey":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]}},"required":["id","instanceId","currentPeriodStart","currentPeriodEnd","quantity","unitAmount","licenseKey","interval","level"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/billing/subscription/license \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/billing/subscription/license',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/license\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/manage-billing":{"post":{"description":"Manage billing","tags":["billing","license"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"returnUrl":{"type":"string"}},"required":["returnUrl"]}}}},"responses":{"200":{"description":"Returns manage billing url","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/billing/subscription/license/manage-billing \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"returnUrl\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/manage-billing';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"returnUrl\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/billing/subscription/license/manage-billing',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({returnUrl: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"returnUrl\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/billing/subscription/license/manage-billing\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/manage-billing/availability":{"get":{"description":"Get manage billing portal availability","tags":["billing","license"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns whether user can access manage billing portal","content":{"application/json":{"schema":{"type":"object","properties":{"canAccessPortal":{"type":"boolean"}},"required":["canAccessPortal"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/billing/subscription/license/manage-billing/availability \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/manage-billing/availability';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/billing/subscription/license/manage-billing/availability',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/license/manage-billing/availability\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/checkout":{"post":{"description":"Get checkout session url for a space","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"priceId":{"type":"string"},"quantity":{"type":"number"},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"},"isTrial":{"type":"boolean"},"clientReferenceId":{"type":"string"}},"required":["priceId","quantity"]}}}},"responses":{"200":{"description":"Returns checkout session url about a space.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","nullable":true}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/checkout \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"isTrial\":true,\"clientReferenceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/checkout';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"isTrial\":true,\"clientReferenceId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/subscription/checkout',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  priceId: 'string',\n  quantity: 0,\n  successUrl: 'string',\n  cancelUrl: 'string',\n  isTrial: true,\n  clientReferenceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"priceId\\\":\\\"string\\\",\\\"quantity\\\":0,\\\"successUrl\\\":\\\"string\\\",\\\"cancelUrl\\\":\\\"string\\\",\\\"isTrial\\\":true,\\\"clientReferenceId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/billing/subscription/checkout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/checkout":{"post":{"description":"Get checkout session url for a self-hosted license","tags":["billing"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string","minLength":36,"maxLength":36},"priceId":{"type":"string"},"quantity":{"type":"number"},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"},"clientReferenceId":{"type":"string"}},"required":["instanceId","priceId","quantity"]}}}},"responses":{"200":{"description":"Returns checkout session url about a self-hosted license.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","nullable":true}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/billing/subscription/license/checkout \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"instanceId\":\"stringstringstringstringstringstring\",\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"clientReferenceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/checkout';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"instanceId\":\"stringstringstringstringstringstring\",\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"clientReferenceId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/billing/subscription/license/checkout',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  instanceId: 'stringstringstringstringstringstring',\n  priceId: 'string',\n  quantity: 0,\n  successUrl: 'string',\n  cancelUrl: 'string',\n  clientReferenceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"instanceId\\\":\\\"stringstringstringstringstringstring\\\",\\\"priceId\\\":\\\"string\\\",\\\"quantity\\\":0,\\\"successUrl\\\":\\\"string\\\",\\\"cancelUrl\\\":\\\"string\\\",\\\"clientReferenceId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/billing/subscription/license/checkout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/plan":{"get":{"description":"Retrieves the plan subscription","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the plan subscription.","content":{"application/json":{"schema":{"type":"object","properties":{"quantity":{"type":"number"}},"required":["quantity"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/plan \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/plan';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/subscription/plan',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/subscription/plan\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/all-products":{"get":{"description":"Get all products collection","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns all products collection.","content":{"application/json":{"schema":{"type":"object","properties":{"baseProducts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"trialPeriodInDays":{"type":"number"},"giftCredit":{"type":"number"},"creditSubscribeEnable":{"type":"boolean"},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}}},"required":["id","type","catalog","level","limit","prices"]}},"addOnProducts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}},"trialPeriodInDays":{"type":"number"}},"required":["id","type","catalog","unitAmount","prices"]}}},"required":["baseProducts","addOnProducts"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/billing/all-products \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/all-products';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/billing/all-products',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/all-products\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-summary":{"get":{"description":"Get space credit summary","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns space credit summary.","content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number"},"usedAmount":{"type":"number"},"leftAmount":{"type":"number"}},"required":["amount","usedAmount","leftAmount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-summary \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/credit-summary',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/credit-summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-detail":{"get":{"description":"Get space credit usage detail by month","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"required":true,"name":"month","in":"query"}],"responses":{"200":{"description":"Returns space credit usage detail.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"automation_ai_action":{"type":"number"},"ai_generation":{"type":"number"},"field_ai_generation":{"type":"number"},"ai_chat":{"type":"number"},"app_generation":{"type":"number"}},"required":["date","automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-history":{"get":{"description":"Get space credit history list with cursor pagination","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"required":true,"name":"month","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"required":false,"name":"take","in":"query"},{"schema":{"type":"string","enum":["automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation"]},"required":false,"name":"sourceType","in":"query"},{"schema":{"type":"string","enum":["createdTime","amount"]},"required":false,"name":"orderBy","in":"query"},{"schema":{"type":"string","enum":["asc","desc"]},"required":false,"name":"order","in":"query"}],"responses":{"200":{"description":"Returns credit history records with cursor pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sourceType":{"type":"string","enum":["automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation"]},"amount":{"type":"number"},"createdTime":{"type":"string"},"displayName":{"type":"string","nullable":true},"user":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","avatar"]}},"required":["id","sourceType","amount","createdTime","displayName","user"]}},"nextCursor":{"type":"string","nullable":true}},"required":["data","nextCursor"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/manage-portal":{"get":{"description":"Get Stripe customer portal URL for managing billing details","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns Stripe customer portal URL.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/manage-portal \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/manage-portal';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/billing/manage-portal',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/manage-portal\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}":{"patch":{"description":"Update a user info","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"isActivated":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Update a user info successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/admin/user/%7BuserId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"isActivated\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"isActivated\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/user/%7BuserId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', isActivated: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"isActivated\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/user/%7BuserId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a user by user ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/admin/user/%7BuserId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/user/%7BuserId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/user/%7BuserId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user":{"get":{"description":"Get paginated users for the instance","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeDeleted","in":"query"},{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated users for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"deletedTime":{"type":"string","nullable":true},"lastSignTime":{"type":"string","nullable":true},"deactivatedTime":{"type":"string","nullable":true},"isAdmin":{"type":"boolean","nullable":true},"billable":{"type":"boolean","nullable":true}},"required":["id","name","email","avatar","createdTime","deletedTime","lastSignTime","deactivatedTime","isAdmin"]}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}/permanent-delete":{"delete":{"description":"Permanent delete a user by user ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Permanent delete a user by user ID for admin"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/admin/user/%7BuserId%7D/permanent-delete \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/permanent-delete';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/user/%7BuserId%7D/permanent-delete',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/user/%7BuserId%7D/permanent-delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}/restore-delete":{"post":{"description":"Restore a deleted user","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Restore a deleted user successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/admin/user/%7BuserId%7D/restore-delete \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/restore-delete';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/user/%7BuserId%7D/restore-delete',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/admin/user/%7BuserId%7D/restore-delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}/admin":{"patch":{"description":"Set or unset admin privilege for a user","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isAdmin":{"type":"boolean"}},"required":["isAdmin"]}}}},"responses":{"200":{"description":"User admin privilege updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/admin/user/%7BuserId%7D/admin \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"isAdmin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/admin';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"isAdmin\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/user/%7BuserId%7D/admin',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({isAdmin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isAdmin\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/user/%7BuserId%7D/admin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}":{"patch":{"description":"update enterprise space information","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"autoJoin":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Update enterprise space successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/admin/space/%7BspaceId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\",\"autoJoin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\",\"autoJoin\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/space/%7BspaceId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string', autoJoin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"autoJoin\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/space/%7BspaceId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a space by space ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/admin/space/%7BspaceId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/space/%7BspaceId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/space/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space":{"get":{"description":"Get paginated spaces for the instance","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated spaces for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdTime":{"type":"string"},"autoJoin":{"type":"boolean","nullable":true},"baseCount":{"type":"number"},"collaboratorCount":{"type":"number"}},"required":["id","name","createdTime","autoJoin","baseCount","collaboratorCount"]}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/organization":{"get":{"description":"Get paginated organizations for the instance","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated organizations for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"userCount":{"type":"number"},"spaceCount":{"type":"number"},"adminCount":{"type":"number"},"admins":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email","avatar"]}}},"required":["id","name","createdTime","createdBy","userCount","spaceCount","adminCount","admins"]}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a new organization","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"201":{"description":"Organization created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"}},"required":["id","name","createdTime","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/admin/organization \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/organization',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/organization\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/organization/{organizationId}":{"delete":{"description":"Delete an organization by organization ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/admin/organization/%7BorganizationId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization/%7BorganizationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/organization/%7BorganizationId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/organization/%7BorganizationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/organization/{organizationId}/admin":{"get":{"description":"Get organization admin users","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Returns organization admin users.","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email","avatar"]}}},"required":["users"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/organization/%7BorganizationId%7D/admin',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/organization/%7BorganizationId%7D/admin\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update organization admin status for a user","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["userId","isAdmin"]}}}},"responses":{"200":{"description":"Organization admin status updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"userId\":\"string\",\"isAdmin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"userId\":\"string\",\"isAdmin\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/organization/%7BorganizationId%7D/admin',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({userId: 'string', isAdmin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userId\\\":\\\"string\\\",\\\"isAdmin\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/admin/organization/%7BorganizationId%7D/admin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license":{"get":{"description":"Get enterprise license information","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns enterprise license information.","content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string"},"organizationId":{"type":"string"},"license":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"plan":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"quantity":{"type":"number"},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true}},"required":["level","quantity","currentPeriodStart","currentPeriodEnd","expiredTime"]}},"required":["id","plan"]}},"required":["instanceId","license"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/enterprise-license \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/enterprise-license',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/enterprise-license\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a enterprise license","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enterprise license registered successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/admin/enterprise-license \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/enterprise-license',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/admin/enterprise-license\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license/{licenseId}":{"patch":{"description":"Update a enterprise license by license ID","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enterprise license updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/admin/enterprise-license/%7BlicenseId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/%7BlicenseId%7D';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/enterprise-license/%7BlicenseId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/enterprise-license/%7BlicenseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/audit-logs":{"get":{"description":"Get audit logs with filtering and pagination","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"userId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"action","in":"query"},{"schema":{"type":"string"},"required":false,"name":"resourceId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"startTime","in":"query"},{"schema":{"type":"string"},"required":false,"name":"endTime","in":"query"},{"schema":{"type":"integer","minimum":0,"default":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":20},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Returns paginated audit logs.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"action":{"type":"string"},"resourceId":{"type":"string"},"origin":{"type":"object","properties":{"ip":{"type":"string"},"byApi":{"type":"boolean"},"userAgent":{"type":"string"},"referer":{"type":"string"}},"required":["ip"]},"payloadVersion":{"type":"string"},"payload":{"nullable":true},"createdTime":{"type":"string"}},"required":["id","userId","action","origin","payloadVersion","createdTime"]}}},"required":["items"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/summary":{"get":{"description":"Retrieves a summary of workflow observability","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"workflowIds","in":"path"},{"schema":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"required":false,"name":"timeRange","in":"path"},{"schema":{"type":"string","enum":["30m","1h","6h","1d","3d","7d","30d"]},"required":false,"name":"relativeTime","in":"path"},{"schema":{"type":"boolean"},"required":false,"name":"isActive","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"baseIds","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"spaceIds","in":"path"},{"schema":{"type":"array","items":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"]}},"required":false,"name":"triggerType","in":"path"}],"responses":{"200":{"description":"Returns a summary of workflow observability","content":{"application/json":{"schema":{"type":"object","properties":{"workflow":{"type":"object","properties":{"activeCount":{"type":"number"},"totalCount":{"type":"number"}},"required":["activeCount","totalCount"]},"workflowRuns":{"type":"object","properties":{"totalCount":{"type":"number"},"statusStats":{"type":"object","properties":{"pending":{"type":"number"},"running":{"type":"number"},"success":{"type":"number"},"failed":{"type":"number"},"canceled":{"type":"number"}},"required":["pending","running","success","failed","canceled"]},"levelStats":{"type":"object","properties":{"critical":{"type":"number"},"warning":{"type":"number"},"healthy":{"type":"number"}},"required":["critical","warning","healthy"]}},"required":["totalCount","statusStats","levelStats"]}},"required":["workflow","workflowRuns"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/observability/workflow/summary \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/observability/workflow/summary',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/observability/workflow/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow":{"get":{"description":"get observability workflow list","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"workflowIds","in":"query"},{"schema":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"required":false,"name":"timeRange","in":"query"},{"schema":{"type":"string","enum":["30m","1h","6h","1d","3d","7d","30d"]},"required":false,"name":"relativeTime","in":"query"},{"schema":{"type":"boolean"},"required":false,"name":"isActive","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"baseIds","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"spaceIds","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"]}},"required":false,"name":"triggerType","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["id","name"]},"triggerType":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"]},"createdTime":{"type":"string"},"lastRunTime":{"type":"string"},"runStats":{"type":"object","properties":{"statusStats":{"type":"object","properties":{"pending":{"type":"number"},"running":{"type":"number"},"success":{"type":"number"},"failed":{"type":"number"},"canceled":{"type":"number"}},"required":["pending","running","success","failed","canceled"]},"avgSpent":{"type":"number"},"totalCount":{"type":"number"}},"required":["statusStats","avgSpent","totalCount"]},"level":{"type":"string","enum":["healthy","warning","critical"]},"isActive":{"type":"boolean"}},"required":["id","name","base","triggerType","createdTime","runStats","level"]}},"total":{"type":"number"}},"required":["data","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/{workflowId}/deactivate":{"post":{"description":"Deactivate a workflow observability","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Workflow observability deactivated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/deactivate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/deactivate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/observability/workflow/%7BworkflowId%7D/deactivate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/admin/observability/workflow/%7BworkflowId%7D/deactivate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/{workflowId}":{"delete":{"description":"Delete a workflow observability","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Workflow observability deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/observability/workflow/%7BworkflowId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/observability/workflow/%7BworkflowId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/{workflowId}/run-history":{"get":{"description":"get workflow run history","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string","enum":["success","failed","running","canceled","pending"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["success","failed","running","canceled","pending"]},"errorMsg":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]},"spent":{"type":"number"},"createdTime":{"type":"string"}},"required":["id","status","createdTime"]}},"total":{"type":"number"}},"required":["runs","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/files":{"patch":{"description":"Update app files","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"App files updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/files \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/files';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/files',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/files\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/props":{"patch":{"description":"Update app props","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"App props updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"}},"required":["id","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/props \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/props';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/props',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/props\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/run":{"post":{"description":"Run the app code","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"}],"responses":{"201":{"description":"The app running result","content":{"application/json":{"schema":{"type":"object","properties":{"previewUrl":{"type":"string","description":"Preview URL"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/run \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/run';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/run',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/run\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/export-code":{"get":{"description":"Export app source code as a ZIP file","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"Source code exported successfully as ZIP file","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/import-code":{"post":{"description":"Import app source code from a ZIP file","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"nullable":true,"description":"ZIP file containing source code"}}}}}},"responses":{"200":{"description":"Source code imported successfully","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"number"},"filesCount":{"type":"number"}},"required":["version","filesCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: multipart/form-data' \\\n  --form file=null"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code';\nconst form = new FormData();\nform.append('file', 'null');\n\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nnull\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nnull\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/deploy":{"post":{"description":"Deploy app to Vercel","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"responses":{"201":{"description":"Deployment result","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["deploying","success","failed"],"description":"Deployment status"},"version":{"type":"number","description":"App version"},"publicUrl":{"type":"string","description":"Public URL"},"error":{"type":"string","description":"Error message if failed"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/deploy/status":{"get":{"description":"Get app deployment status","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"responses":{"200":{"description":"Deployment status","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["idle","deploying","success","failed"],"description":"Deployment status"},"version":{"type":"number","description":"App version"},"publicUrl":{"type":"string","description":"Public URL"},"error":{"type":"string","description":"Error message if failed"},"startTime":{"type":"number","description":"Deployment start timestamp"},"endTime":{"type":"number","description":"Deployment end timestamp"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}":{"delete":{"summary":"Delete app","description":"Delete app by its ID.","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/app/%7BappId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/permanent":{"delete":{"summary":"Permanently delete app","description":"Permanently delete an app and all its data. This action cannot be undone.","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"App permanently deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication/{id}":{"get":{"description":"Get a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'feishu',\n  config: {appId: 'string', appSecret: 'string'},\n  id: 'string',\n  name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication":{"get":{"description":"Get a authentication list","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/authentication',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/authentication',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'feishu',\n  config: {appId: 'string', appSecret: 'string'},\n  id: 'string',\n  name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/authentication\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication/providers":{"get":{"description":"Get providers","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["oidc","feishu"]}},"required":["id","name","type"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/providers \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/providers';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/authentication/providers',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication/providers\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/domain-verification":{"delete":{"description":"Delete a domain verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"domain","in":"query"}],"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a domain verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"createdTime":{"type":"string"}},"required":["id","domain","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/domain-verification',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/domain-verification\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a domain verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"verifyCode":{"type":"string"}},"required":["domain","verifyCode"]}}}},"responses":{"200":{"description":"Domain verification created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"domain\":\"string\",\"verifyCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"domain\":\"string\",\"verifyCode\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/domain-verification',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({domain: 'string', verifyCode: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\",\\\"verifyCode\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/domain-verification\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/domain-verification/send-verification-email":{"post":{"description":"Send email verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"domain\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"domain\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({domain: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}":{"get":{"description":"Get organization","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Get organization","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"domain":{"type":"array","items":{"type":"string"}}},"required":["name","id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/rename":{"put":{"description":"Rename organization","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Rename organization"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/rename \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/rename';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/rename',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/organization/%7BorganizationId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/update-auto-space":{"put":{"description":"Update auto space","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"autoSpaceType":{"type":"string","enum":["all","selected","none"]},"autoSpaceIds":{"type":"array","items":{"type":"string"}}},"required":["autoSpaceType"]}}}},"responses":{"200":{"description":"Update auto space","content":{"application/json":{"schema":{"type":"object","properties":{"autoSpaceType":{"type":"string","enum":["all","selected","none"]},"autoSpaceIds":{"type":"array","items":{"type":"string"}}},"required":["autoSpaceType"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/update-auto-space \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"autoSpaceType\":\"all\",\"autoSpaceIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/update-auto-space';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"autoSpaceType\":\"all\",\"autoSpaceIds\":[\"string\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/update-auto-space',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({autoSpaceType: 'all', autoSpaceIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"autoSpaceType\\\":\\\"all\\\",\\\"autoSpaceIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/organization/%7BorganizationId%7D/update-auto-space\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/space":{"get":{"description":"Get organization space","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get organization space","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"spaceName":{"type":"string"}},"required":["spaceId","spaceName"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/space \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/space';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/space',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/space\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/setting":{"get":{"description":"Get organization setting","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get organization setting"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/setting \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/setting';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/setting',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/setting\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/users":{"get":{"description":"Get organization users","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Get organization users","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"createdTime":{"type":"string"},"isAdmin":{"type":"boolean"},"isExternal":{"type":"boolean"},"deactivatedTime":{"type":"string"}},"required":["id","name","email","createdTime"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"tags":["organization","user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"departmentId":{"type":"string"},"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"}},"required":["email"]}}}}},"responses":{"201":{"description":"Create users successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"}},"required":["id","email","name"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/users \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '[{\"departmentId\":\"string\",\"id\":\"string\",\"email\":\"string\",\"name\":\"string\",\"phone\":\"string\"}]'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/users';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '[{\"departmentId\":\"string\",\"id\":\"string\",\"email\":\"string\",\"name\":\"string\",\"phone\":\"string\"}]'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/users',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify([\n  {\n    departmentId: 'string',\n    id: 'string',\n    email: 'string',\n    name: 'string',\n    phone: 'string'\n  }\n]));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"[{\\\"departmentId\\\":\\\"string\\\",\\\"id\\\":\\\"string\\\",\\\"email\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"phone\\\":\\\"string\\\"}]\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/users\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user":{"post":{"description":"Add organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"}}},"required":["emails"]}}}},"responses":{"200":{"description":"Add organization user","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"email":{"type":"string","format":"email"},"success":{"type":"boolean","enum":[true]}},"required":["email","success"]},{"type":"object","properties":{"email":{"type":"string","format":"email"},"success":{"type":"boolean","enum":[false]},"message":{"type":"string"}},"required":["email","success","message"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"emails\":[\"user@example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"emails\":[\"user@example.com\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/user',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({emails: ['user@example.com']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"emails\\\":[\\\"user@example.com\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["userIds"]}}}},"responses":{"200":{"description":"Delete organization user"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user';\nconst options = {\n  method: 'DELETE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"userIds\":[\"string\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/user',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"DELETE\", \"/api/organization/%7BorganizationId%7D/user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user/{userId}/deactivate":{"post":{"description":"Deactivate organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"User deactivated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user/{userId}/activate":{"post":{"description":"Activate organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"User activated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user/{userId}":{"patch":{"description":"Update organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isAdmin":{"type":"boolean"}}}}}},"responses":{"200":{"description":"User updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"isAdmin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"isAdmin\":true}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({isAdmin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isAdmin\\\":true}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Get organization user","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name","email","organization"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user-exists":{"get":{"tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"userIds","in":"query"}],"responses":{"200":{"description":"User exists","content":{"application/json":{"schema":{"type":"array","items":{"type":"boolean"}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-scope":{"put":{"description":"Update department scope","tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentScope":{"type":"string","enum":["all","related"]}},"required":["departmentScope"]}}}},"responses":{"200":{"description":"Update department scope","content":{"application/json":{"schema":{"type":"object","properties":{"departmentScope":{"type":"string","enum":["all","related"]}},"required":["departmentScope"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-scope \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"departmentScope\":\"all\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-scope';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"departmentScope\":\"all\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department-scope',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({departmentScope: 'all'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentScope\\\":\\\"all\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/organization/%7BorganizationId%7D/department-scope\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/count":{"get":{"description":"Get space manage list total","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Get space manage list total successfully","content":{"application/json":{"schema":{"type":"number"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/count \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/count';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/space-manage/count',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage/count\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage":{"get":{"description":"Get space manage list","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"number","nullable":true,"default":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"maximum":100,"default":10},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Get space manage list successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"baseCount":{"type":"number"},"collaboratorCount":{"type":"number"},"isOrganization":{"type":"boolean"}},"required":["id","name","baseCount","collaboratorCount"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}/remove-organization":{"delete":{"description":"Remove space from organization","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Space removed from organization successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}/add-organization":{"post":{"description":"Add space to organization","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"201":{"description":"Space added to organization successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}":{"get":{"description":"Get space manage detail","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Get space manage detail successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isOrganization":{"type":"boolean"},"base":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["id","name"]}},"collaboratorCount":{"type":"number"},"externalUserCount":{"type":"number"}},"required":["id","name","isOrganization","base","collaboratorCount","externalUserCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department/{departmentId}":{"get":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"responses":{"200":{"description":"Get department successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}},"hasChildren":{"type":"boolean"}},"required":["id","name","hasChildren"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"responses":{"200":{"description":"Delete department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department/{departmentId}/rename":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Rename department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department/{departmentId}/move":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"parentId":{"type":"string","nullable":true}},"required":["parentId"]}}}},"responses":{"200":{"description":"Move department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"parentId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"parentId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({parentId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"parentId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department":{"post":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Create department successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"id\":\"string\",\"name\":\"string\",\"parentId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"id\":\"string\",\"name\":\"string\",\"parentId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({id: 'string', name: 'string', parentId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"parentId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/department\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"parentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"}],"responses":{"200":{"description":"Get department list successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}},"hasChildren":{"type":"boolean"}},"required":["id","name","hasChildren"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-user":{"post":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentIds":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string"}}},"required":["departmentIds","userIds"]}}}},"responses":{"200":{"description":"Add department users successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"departmentIds\":[\"string\"],\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"departmentIds\":[\"string\"],\"userIds\":[\"string\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department-user',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({departmentIds: ['string'], userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentIds\\\":[\\\"string\\\"],\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/department-user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"userIds","in":"query"}],"responses":{"200":{"description":"Remove department users successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"departmentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":0},"required":false,"name":"skip","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":50},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Get department users successfully","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}}},"required":["id","name"]}}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-user/move":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentId":{"type":"string"},"toDepartmentId":{"type":"string"},"userIds":{"type":"array","items":{"type":"string"}}},"required":["departmentId","toDepartmentId","userIds"]}}}},"responses":{"200":{"description":"Move department users successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/move \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"departmentId\":\"string\",\"toDepartmentId\":\"string\",\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/move';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"departmentId\":\"string\",\"toDepartmentId\":\"string\",\"userIds\":[\"string\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department-user/move',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({departmentId: 'string', toDepartmentId: 'string', userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentId\\\":\\\"string\\\",\\\"toDepartmentId\\\":\\\"string\\\",\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department-user/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-user/department":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentIds":{"type":"array","items":{"type":"string"}},"userId":{"type":"string"}},"required":["userId"]}}}},"responses":{"200":{"description":"Update user department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/department \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"departmentIds\":[\"string\"],\"userId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/department';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"departmentIds\":[\"string\"],\"userId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/department-user/department',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({departmentIds: ['string'], userId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentIds\\\":[\\\"string\\\"],\\\"userId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department-user/department\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/me":{"get":{"description":"Get organization me","tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Get organization me","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string"},"organizationId":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["userId","organizationId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/organization/%7BorganizationId%7D/me \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/me';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/organization/%7BorganizationId%7D/me',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/me\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/instance/organization":{"get":{"description":"Get instance organization, only for enterprise edition","tags":["organization","instance"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get instance organization successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/instance/organization \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/instance/organization';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/instance/organization',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/instance/organization\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/sql-query":{"post":{"description":"Execute SQL query on a base","summary":"Execute SQL query","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The base ID to execute query on"},"required":true,"description":"The base ID to execute query on","name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string","minLength":1,"description":"The SQL query to execute","example":"SELECT * FROM table_name LIMIT 10"}},"required":["sql"]}}}},"responses":{"200":{"description":"Query executed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}},"description":"The query result rows"}},"required":["rows"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/sql-query \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"sql\":\"SELECT * FROM table_name LIMIT 10\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/sql-query';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"sql\":\"SELECT * FROM table_name LIMIT 10\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/sql-query',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({sql: 'SELECT * FROM table_name LIMIT 10'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sql\\\":\\\"SELECT * FROM table_name LIMIT 10\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/sql-query\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/sign-attachment-urls":{"post":{"description":"Generate signed URLs for attachment files","summary":"Sign attachment URLs","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The base ID"},"required":true,"description":"The base ID","name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"The file path of the attachment"},"token":{"type":"string","description":"The access token for the attachment"},"mimetype":{"type":"string","description":"The MIME type of the attachment","example":"image/png"}},"required":["path","token"]},"description":"List of attachments to sign"}},"required":["attachments"]}}}},"responses":{"200":{"description":"URLs signed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","description":"The original attachment token"},"url":{"type":"string","description":"The signed URL for the attachment"}},"required":["token","url"]},"description":"List of signed attachments with their tokens and URLs"}},"required":["attachments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/sign-attachment-urls \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"attachments\":[{\"path\":\"string\",\"token\":\"string\",\"mimetype\":\"image/png\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/sign-attachment-urls';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"attachments\":[{\"path\":\"string\",\"token\":\"string\",\"mimetype\":\"image/png\"}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/sign-attachment-urls',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({attachments: [{path: 'string', token: 'string', mimetype: 'image/png'}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"path\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\",\\\"mimetype\\\":\\\"image/png\\\"}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/sign-attachment-urls\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/create":{"post":{"description":"Create chat","tags":["chat"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"type":{"type":"string"},"resourceId":{"type":"string"}},"required":["baseId"]}}}},"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/create \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"baseId\":\"string\",\"type\":\"string\",\"resourceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/create';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"baseId\":\"string\",\"type\":\"string\",\"resourceId\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/create',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({baseId: 'string', type: 'string', resourceId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\",\\\"type\\\":\\\"string\\\",\\\"resourceId\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/messages":{"get":{"description":"Get chat messages","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"responses":{"200":{"description":"Chat messages"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Clear all messages in a chat","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/history":{"get":{"description":"Get chat history","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"type","in":"query"}],"responses":{"200":{"description":"Get chat history successfully","content":{"application/json":{"schema":{"type":"object","properties":{"history":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","createdTime","createdBy"]}},"total":{"type":"number"}},"required":["history","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/delete":{"delete":{"tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"responses":{"200":{"description":"Chat deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/rename":{"patch":{"tags":["chat"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Chat renamed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename';\nconst options = {\n  method: 'PATCH',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PATCH',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/stop":{"post":{"description":"Stop an active chat stream and prevent resume","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/suggestions":{"post":{"tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["recommend","ask","analyze","build"]},"lang":{"type":"string"}},"required":["type"]}}}},"responses":{"200":{"description":"Chat suggestions"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/suggestions \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"recommend\",\"lang\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/suggestions';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"recommend\",\"lang\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/suggestions',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({type: 'recommend', lang: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"recommend\\\",\\\"lang\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/suggestions\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/onboarding/scenarios":{"get":{"description":"Get onboarding scenarios with presigned URLs for attachments","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get onboarding scenarios successfully","content":{"application/json":{"schema":{"type":"object","properties":{"scenarios":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"placeholder":{"type":"string"},"prompt":{"type":"string"},"files":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"fileName":{"type":"string"},"path":{"type":"string"},"presignedUrl":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"}},"required":["token","fileName","path","presignedUrl","mimetype","size"]}}},"required":["id","placeholder","prompt","files"]}}},"required":["scenarios"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/chat/onboarding/scenarios \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/onboarding/scenarios';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/chat/onboarding/scenarios',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/chat/onboarding/scenarios\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/onboarding/attachments":{"post":{"description":"Get attachment info by tokens. Used for landing page onboarding flow.","tags":["chat"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tokens":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20}},"required":["tokens"]}}}},"responses":{"200":{"description":"Get attachments successfully","content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"presignedUrl":{"type":"string"}},"required":["token","name","path","mimetype","size","presignedUrl"]}}},"required":["attachments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/chat/onboarding/attachments \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"tokens\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/onboarding/attachments';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"tokens\":[\"string\"]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/chat/onboarding/attachments',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({tokens: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"tokens\\\":[\\\"string\\\"]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/chat/onboarding/attachments\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/text-extract":{"post":{"description":"Extract text content from attachments","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"path":{"type":"string"},"presignedUrl":{"type":"string"}},"required":["token","mimetype"]},"minItems":1,"description":"Attachments to extract text from"}},"required":["attachments"]}}}},"responses":{"200":{"description":"Extracted text content","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"extractedFiles":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"content":{"type":"string"},"charCount":{"type":"number"},"truncated":{"type":"boolean"},"isPreview":{"type":"boolean"}},"required":["token","content","charCount","truncated"]}},"totalCharacters":{"type":"number"},"truncatedFiles":{"type":"number"},"message":{"type":"string"},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/text-extract \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"attachments\":[{\"token\":\"string\",\"name\":\"string\",\"mimetype\":\"string\",\"size\":0,\"path\":\"string\",\"presignedUrl\":\"string\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/text-extract';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"attachments\":[{\"token\":\"string\",\"name\":\"string\",\"mimetype\":\"string\",\"size\":0,\"path\":\"string\",\"presignedUrl\":\"string\"}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/text-extract',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  attachments: [\n    {\n      token: 'string',\n      name: 'string',\n      mimetype: 'string',\n      size: 0,\n      path: 'string',\n      presignedUrl: 'string'\n    }\n  ]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"token\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"mimetype\\\":\\\"string\\\",\\\"size\\\":0,\\\"path\\\":\\\"string\\\",\\\"presignedUrl\\\":\\\"string\\\"}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/text-extract\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/execute-script":{"post":{"description":"Execute TypeScript code in sandbox for chat tools","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"TypeScript code to execute"},"input":{"type":"object","additionalProperties":{"nullable":true},"description":"Input parameters for the script"},"integrationIds":{"type":"array","items":{"type":"string"},"description":"Integration IDs to inject into script context"},"dependencies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"NPM dependencies to install"}},"required":["code"]}}}},"responses":{"200":{"description":"Script execution result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"result":{"type":"object","additionalProperties":{"nullable":true}},"logs":{"type":"object","properties":{"stdout":{"type":"string"},"stderr":{"type":"string"}},"required":["stdout","stderr"]},"executionTime":{"type":"number"},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/execute-script \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"code\":\"string\",\"input\":{\"property1\":null,\"property2\":null},\"integrationIds\":[\"string\"],\"dependencies\":[{\"name\":\"string\",\"version\":\"string\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/execute-script';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"code\":\"string\",\"input\":{\"property1\":null,\"property2\":null},\"integrationIds\":[\"string\"],\"dependencies\":[{\"name\":\"string\",\"version\":\"string\"}]}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/execute-script',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  code: 'string',\n  input: {property1: null, property2: null},\n  integrationIds: ['string'],\n  dependencies: [{name: 'string', version: 'string'}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"code\\\":\\\"string\\\",\\\"input\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"integrationIds\\\":[\\\"string\\\"],\\\"dependencies\\\":[{\\\"name\\\":\\\"string\\\",\\\"version\\\":\\\"string\\\"}]}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/execute-script\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/resolve-attachments":{"post":{"description":"Resolve attachment tokens to presigned URLs","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tokens":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Array of attachment tokens to resolve"},"nameHints":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional map of token -> filename for name hints"}},"required":["tokens"]}}}},"responses":{"200":{"description":"Resolved attachments with URLs","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"url":{"type":"string"},"name":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"path":{"type":"string"}},"required":["token","url"]}},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/resolve-attachments \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"tokens\":[\"string\"],\"nameHints\":{\"property1\":\"string\",\"property2\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/resolve-attachments';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"tokens\":[\"string\"],\"nameHints\":{\"property1\":\"string\",\"property2\":\"string\"}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/base/%7BbaseId%7D/chat/resolve-attachments',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({tokens: ['string'], nameHints: {property1: 'string', property2: 'string'}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"tokens\\\":[\\\"string\\\"],\\\"nameHints\\\":{\\\"property1\\\":\\\"string\\\",\\\"property2\\\":\\\"string\\\"}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/resolve-attachments\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/authentication/{id}":{"get":{"description":"Get a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/authentication/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D';\nconst options = {\n  method: 'PUT',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'PUT',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/authentication/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'feishu',\n  config: {appId: 'string', appSecret: 'string'},\n  id: 'string',\n  name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/space/%7BspaceId%7D/authentication/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/authentication/%7Bid%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/authentication":{"get":{"description":"Get a space authentication list","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/authentication',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/authentication\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/authentication',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  type: 'feishu',\n  config: {appId: 'string', appSecret: 'string'},\n  id: 'string',\n  name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/authentication\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/authentication/providers":{"get":{"description":"Get space authentication providers","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["oidc","feishu"]}},"required":["id","name","type"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/authentication/providers \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/authentication/providers';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/authentication/providers',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/authentication/providers\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/domain-verification":{"delete":{"description":"Delete a space domain verification","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"domain","in":"query"}],"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n  --url 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'DELETE',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a space domain verification list","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"createdTime":{"type":"string"}},"required":["id","domain","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/domain-verification',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/domain-verification\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a space domain verification","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"verifyCode":{"type":"string"}},"required":["domain","verifyCode"]}}}},"responses":{"200":{"description":"Domain verification created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"domain\":\"string\",\"verifyCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"domain\":\"string\",\"verifyCode\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/domain-verification',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({domain: 'string', verifyCode: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\",\\\"verifyCode\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/domain-verification\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/domain-verification/send-verification-email":{"post":{"description":"Send space email verification","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification/send-verification-email \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"domain\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification/send-verification-email';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"domain\":\"string\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/domain-verification/send-verification-email',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({domain: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/domain-verification/send-verification-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/api/{baseId}/ai/generate":{"post":{"description":"Generate AI text (non-streaming)","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string"},"task":{"type":"string","enum":["coding","embedding","translation"],"description":"Quick model selection via predefined task type","example":"coding"},"modelKey":{"type":"string","description":"Specify an exact model configuration to use","example":"openai@gpt-4o@custom-name"}},"required":["prompt"]}}}},"responses":{"201":{"description":"Returns generated AI text.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/api/%7BbaseId%7D/ai/generate',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({prompt: 'string', task: 'coding', modelKey: 'openai@gpt-4o@custom-name'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"prompt\\\":\\\"string\\\",\\\"task\\\":\\\"coding\\\",\\\"modelKey\\\":\\\"openai@gpt-4o@custom-name\\\"}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/api/%7BbaseId%7D/ai/generate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/reward/claim":{"post":{"summary":"Claim a reward","description":"Submit a reward claim (e.g., social share)","tags":["reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"sourceType":{"type":"string","enum":["socialShare"]},"sourceMetaData":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin"]},"postUrl":{"type":"string"},"postId":{"type":"string"},"snapshotId":{"type":"string"},"content":{"type":"string"},"username":{"type":"string"},"followerCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"localization":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]}},"required":["message"]}}},"required":["isValid"]}},"required":["platform","postUrl"]}},"required":["sourceType","sourceMetaData"]},{"type":"object","properties":{"sourceType":{"type":"string","enum":["appSumoActivation"]},"sourceMetaData":{"nullable":true}},"required":["sourceType"]}]}}}},"responses":{"201":{"description":"Reward claim submitted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"rewardStatus":{"type":"string","enum":["pending","approved","rejected"]}},"required":["id","rewardStatus"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/claim \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n  --header 'content-type: application/json' \\\n  --data '{\"sourceType\":\"socialShare\",\"sourceMetaData\":{\"platform\":\"x\",\"postUrl\":\"string\",\"postId\":\"string\",\"snapshotId\":\"string\",\"content\":\"string\",\"username\":\"string\",\"followerCount\":0,\"verifyResult\":{\"isValid\":true,\"errors\":[{\"message\":\"string\",\"localization\":{\"i18nKey\":\"string\",\"context\":{\"property1\":null,\"property2\":null}}}]}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/claim';\nconst options = {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  },\n  body: '{\"sourceType\":\"socialShare\",\"sourceMetaData\":{\"platform\":\"x\",\"postUrl\":\"string\",\"postId\":\"string\",\"snapshotId\":\"string\",\"content\":\"string\",\"username\":\"string\",\"followerCount\":0,\"verifyResult\":{\"isValid\":true,\"errors\":[{\"message\":\"string\",\"localization\":{\"i18nKey\":\"string\",\"context\":{\"property1\":null,\"property2\":null}}}]}}}'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'POST',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/reward/claim',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n    'content-type': 'application/json'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.write(JSON.stringify({\n  sourceType: 'socialShare',\n  sourceMetaData: {\n    platform: 'x',\n    postUrl: 'string',\n    postId: 'string',\n    snapshotId: 'string',\n    content: 'string',\n    username: 'string',\n    followerCount: 0,\n    verifyResult: {\n      isValid: true,\n      errors: [\n        {\n          message: 'string',\n          localization: {i18nKey: 'string', context: {property1: null, property2: null}}\n        }\n      ]\n    }\n  }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sourceType\\\":\\\"socialShare\\\",\\\"sourceMetaData\\\":{\\\"platform\\\":\\\"x\\\",\\\"postUrl\\\":\\\"string\\\",\\\"postId\\\":\\\"string\\\",\\\"snapshotId\\\":\\\"string\\\",\\\"content\\\":\\\"string\\\",\\\"username\\\":\\\"string\\\",\\\"followerCount\\\":0,\\\"verifyResult\\\":{\\\"isValid\\\":true,\\\"errors\\\":[{\\\"message\\\":\\\"string\\\",\\\"localization\\\":{\\\"i18nKey\\\":\\\"string\\\",\\\"context\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}}]}}}\"\n\nheaders = {\n    'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n    'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/reward/claim\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/reward/credit-list":{"get":{"summary":"Get reward credit list","description":"Get reward credit list for a space","tags":["reward","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of reward credits","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sourceType":{"type":"string","enum":["appSumoActivation","socialShare","system"]},"rewardStatus":{"type":"string","enum":["pending","approved","rejected"]},"rewardType":{"type":"string","enum":["credit"]},"rewardAmount":{"type":"number"},"consumedAmount":{"type":"number"},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","sourceType","rewardStatus","rewardType","rewardAmount","consumedAmount","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/credit-list \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/credit-list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/reward/credit-list',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/reward/credit-list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/reward/{rewardId}":{"get":{"summary":"Get reward details","description":"Get details of a specific reward including its verification status","tags":["reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"rewardId","in":"path"}],"responses":{"200":{"description":"Reward details retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"userId":{"type":"string"},"sourceType":{"type":"string","enum":["appSumoActivation","socialShare","system"]},"sourceMetaData":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin"]},"postUrl":{"type":"string"},"postId":{"type":"string"},"snapshotId":{"type":"string"},"content":{"type":"string"},"username":{"type":"string"},"followerCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"localization":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]}},"required":["message"]}}},"required":["isValid"]}},"required":["platform","postUrl"]},"rewardStatus":{"type":"string","enum":["pending","approved","rejected"]},"rewardAmount":{"type":"number"},"consumedAmount":{"type":"number","nullable":true},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","spaceId","userId","sourceType","sourceMetaData","rewardStatus","rewardAmount","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/%7BrewardId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/%7BrewardId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/space/%7BspaceId%7D/reward/%7BrewardId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/reward/%7BrewardId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/overview":{"get":{"summary":"Get admin reward overview by spaces","description":"Get aggregated reward statistics grouped by space for admin management. Returns pending, approved, consumed, available and expiring amounts per space.","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Search by space name"},"required":false,"description":"Search by space name","name":"search","in":"query"},{"schema":{"type":"string","description":"Filter by created time from (ISO string)"},"required":false,"description":"Filter by created time from (ISO string)","name":"createdTimeFrom","in":"query"},{"schema":{"type":"string","description":"Filter by created time to (ISO string)"},"required":false,"description":"Filter by created time to (ISO string)","name":"createdTimeTo","in":"query"},{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Returns the reward overview grouped by spaces","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"}},"required":["id","name"]},"pendingCount":{"type":"integer"},"rejectedCount":{"type":"integer"},"approvedCount":{"type":"integer"},"approvedAmount":{"type":"integer"},"consumedAmount":{"type":"number"},"availableAmount":{"type":"number"},"expiringSoonAmount":{"type":"number"},"updatedTime":{"type":"string","nullable":true}},"required":["space","user","pendingCount","rejectedCount","approvedCount","approvedAmount","consumedAmount","availableAmount","expiringSoonAmount","updatedTime"]}},"total":{"type":"integer"}},"required":["items","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/list":{"get":{"summary":"Get admin reward list","description":"Get paginated and filtered list of reward for admin management. Supports filtering by space, status, platform, verification result, and search.","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Filter by space ID"},"required":false,"description":"Filter by space ID","name":"spaceId","in":"query"},{"schema":{"type":"string","enum":["appSumoActivation","socialShare","system"],"description":"Filter by reward source type"},"required":false,"description":"Filter by reward source type","name":"sourceType","in":"query"},{"schema":{"type":"string","enum":["pending","approved","rejected"],"description":"Filter by reward status"},"required":false,"description":"Filter by reward status","name":"status","in":"query"},{"schema":{"type":"string","enum":["x","linkedin"],"description":"Filter by social platform"},"required":false,"description":"Filter by social platform","name":"platform","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"Filter by verification result"},"required":false,"description":"Filter by verification result","name":"isValid","in":"query"},{"schema":{"type":"string","description":"Search by postUrl, uniqueKey or userId"},"required":false,"description":"Search by postUrl, uniqueKey or userId","name":"search","in":"query"},{"schema":{"type":"string","description":"Filter by created time from (ISO string)"},"required":false,"description":"Filter by created time from (ISO string)","name":"createdTimeFrom","in":"query"},{"schema":{"type":"string","description":"Filter by created time to (ISO string)"},"required":false,"description":"Filter by created time to (ISO string)","name":"createdTimeTo","in":"query"},{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Returns the paginated list of reward","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"}},"required":["id","name"]},"status":{"type":"string","enum":["pending","approved","rejected"]},"sourceType":{"type":"string","enum":["appSumoActivation","socialShare","system"]},"sourceMetaData":{"nullable":true},"amount":{"type":"integer"},"consumedAmount":{"type":"number","nullable":true},"remainingAmount":{"type":"number","nullable":true},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","space","user","status","sourceType","amount","consumedAmount","remainingAmount","rewardTime","expiredTime","createdTime"]}},"total":{"type":"integer"}},"required":["items","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/spaces":{"get":{"summary":"Get all spaces with reward records","description":"Get a list of all spaces that have reward records for admin filtering","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of spaces with reward records","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["items"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/reward/spaces \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/spaces';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/reward/spaces',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/spaces\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/{rewardId}":{"get":{"summary":"Get admin reward detail","description":"Get detailed information of a specific reward including full metadata","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"rewardId","in":"path"}],"responses":{"200":{"description":"Returns the reward detail","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"sourceType":{"type":"string"},"sourceMetaData":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin"]},"postUrl":{"type":"string"},"postId":{"type":"string"},"snapshotId":{"type":"string"},"content":{"type":"string"},"username":{"type":"string"},"followerCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"localization":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]}},"required":["message"]}}},"required":["isValid"]}},"required":["platform","postUrl"]},"uniqueKey":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected"]},"amount":{"type":"integer"},"consumedAmount":{"type":"number","nullable":true},"remainingAmount":{"type":"number","nullable":true},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["id","userId","spaceId","spaceName","sourceType","sourceMetaData","uniqueKey","status","amount","consumedAmount","remainingAmount","rewardTime","expiredTime","createdTime","lastModifiedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url https://app.teable.ai/api/admin/reward/%7BrewardId%7D \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/%7BrewardId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/reward/%7BrewardId%7D',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/%7BrewardId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/export/{spaceId}":{"get":{"summary":"Export admin reward list as CSV","description":"Export all reward records for a specific space as CSV file. Supports filtering by date range.","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Space ID to export rewards for"},"required":true,"description":"Space ID to export rewards for","name":"spaceId","in":"path"},{"schema":{"type":"string","description":"Filter by created time from (ISO string)"},"required":false,"description":"Filter by created time from (ISO string)","name":"createdTimeFrom","in":"query"},{"schema":{"type":"string","description":"Filter by created time to (ISO string)"},"required":false,"description":"Filter by created time to (ISO string)","name":"createdTimeTo","in":"query"}],"responses":{"200":{"description":"Returns the CSV file with reward records","content":{"text/csv":{"schema":{"type":"string"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.teable.ai/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE' \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n  method: 'GET',\n  hostname: 'app.teable.ai',\n  port: null,\n  path: '/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE',\n  headers: {\n    Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n  }\n};\n\nconst req = http.request(options, function (res) {\n  const chunks = [];\n\n  res.on('data', function (chunk) {\n    chunks.push(chunk);\n  });\n\n  res.on('end', function () {\n    const body = Buffer.concat(chunks);\n    console.log(body.toString());\n  });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}}}}