diff --git a/swagger.json b/swagger.json
index d99ad6a3..af5fe16e 100644
--- a/swagger.json
+++ b/swagger.json
@@ -1 +1 @@
-{"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 project","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 project.","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\"))"}],"x-mint":{"metadata":{"title":"Create project","sidebarTitle":"Create project","description":"Create a project in the specified space."}}}},"/base/{baseId}":{"delete":{"description":"Delete a project 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\"))"}],"x-mint":{"metadata":{"title":"Delete project","sidebarTitle":"Delete project","description":"Move a project to the trash by its ID."}}},"get":{"description":"Get a project by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns information about a project.","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\"))"}],"x-mint":{"metadata":{"title":"Get project","sidebarTitle":"Get project","description":"Retrieve a project by its ID."}}},"patch":{"description":"Update a project 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 project.","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\"))"}],"x-mint":{"metadata":{"title":"Patch project","sidebarTitle":"Update project","description":"Update a project's name or icon."}}}},"/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 project 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\"))"}],"x-mint":{"metadata":{"title":"Put project order","sidebarTitle":"Update project order","description":"Change a project's position in its space."}}}},"/base/access/all":{"get":{"description":"Get project list by query","tags":["base"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of project.","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\"))"}],"x-mint":{"metadata":{"title":"List accessible projects","sidebarTitle":"List accessible projects","description":"List projects accessible to the current user using the supplied query."}}}},"/base/{baseId}/collaborators":{"get":{"description":"List a project 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 project 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\"))"}],"x-mint":{"metadata":{"title":"List project collaborators","sidebarTitle":"List project collaborators","description":"List the collaborators of a project."}}},"delete":{"description":"Delete a project 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\"))"}],"x-mint":{"metadata":{"title":"Remove project collaborator","sidebarTitle":"Remove project collaborator","description":"Remove the specified user or department from a project."}}},"patch":{"description":"Update a project 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\"))"}],"x-mint":{"metadata":{"title":"Update project collaborator","sidebarTitle":"Update project collaborator","description":"Update a collaborator's role in a project."}}}},"/base/duplicate":{"post":{"description":"duplicate a project","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 project to duplicate"},"spaceId":{"type":"string","description":"The space to duplicate the project to"},"withRecords":{"type":"boolean","description":"Whether to duplicate the records"},"name":{"type":"string","description":"The name of the duplicated project"},"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 project. If provided, will use share permissions instead of base|update permission."}},"required":["fromBaseId","spaceId"]}}}},"responses":{"201":{"description":"Returns information about a successfully duplicated project.","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\"))"}],"x-mint":{"metadata":{"title":"Duplicate project","sidebarTitle":"Duplicate project","description":"Create a copy of a project in the target space."}}}},"/base/create-from-template":{"post":{"summary":"Create a project from template or apply a template to a project","description":"Create a project from template or apply a template to a project","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The space id to create a project from"},"templateId":{"type":"string","description":"The template id to create a project from"},"withRecords":{"type":"boolean","description":"Whether to create records from the template"},"baseId":{"type":"string","description":"The project id to apply the template to"}},"required":["spaceId","templateId"]}}}},"responses":{"201":{"description":"Returns information about a successfully created project.","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\"))"}],"x-mint":{"metadata":{"title":"Create or update project from template","sidebarTitle":"Create or update project from template","description":"Create a project from a template or apply a template to an existing project."}}}},"/base/{baseId}/permission":{"get":{"description":"Get a project permission","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about a project 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\"))"}],"x-mint":{"metadata":{"title":"Get project permissions","sidebarTitle":"Get project permissions","description":"Retrieve the current user's permissions for a project."}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"List project invitation links","sidebarTitle":"List project invitation links","description":"List invitation links for a project."}}},"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\"))"}],"x-mint":{"metadata":{"title":"Create project invitation link","sidebarTitle":"Create project invitation link","description":"Create a link for inviting collaborators to a project."}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Delete project invitation link","sidebarTitle":"Delete project invitation link","description":"Delete a project's invitation link by its ID."}}},"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\"))"}],"x-mint":{"metadata":{"title":"Update project invitation link","sidebarTitle":"Update project invitation link","description":"Update a project's invitation link settings."}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Invite project collaborators by email","sidebarTitle":"Invite project collaborators by email","description":"Send email invitations to join a project."}}}},"/base/shared-base":{"get":{"tags":["base"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns information about a shared project.","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\"))"}],"x-mint":{"metadata":{"title":"List projects shared with me","sidebarTitle":"List projects shared with me","description":"List projects shared with the current user or their departments."}}}},"/base/{baseId}/permanent":{"delete":{"description":"Permanently delete a project 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\"))"}],"x-mint":{"metadata":{"title":"Permanently delete project","sidebarTitle":"Permanently delete project","description":"Permanently delete a project by its ID."}}}},"/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 project","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\"))"}],"x-mint":{"metadata":{"title":"Add project collaborator","sidebarTitle":"Add project collaborator","description":"Add a collaborator to a project with the specified role."}}}},"/base/{baseId}/collaborators/users":{"get":{"summary":"Get project collaborator user list","description":"Get project 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 project 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\"))"}],"x-mint":{"metadata":{"title":"List project collaborator users","sidebarTitle":"List project collaborator users","description":"List the user accounts that collaborate on a project."}}}},"/base/{baseId}/dashboard":{"get":{"description":"Get a list of dashboards in project","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\"))"}],"x-mint":{"metadata":{"title":"Get project dashboard","sidebarTitle":"Get project dashboard"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Post project dashboard","sidebarTitle":"Post project dashboard"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project dashboard 1","sidebarTitle":"Get project dashboard 1"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Delete project dashboard","sidebarTitle":"Delete project dashboard"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project dashboard rename","sidebarTitle":"Patch project dashboard rename"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project dashboard layout","sidebarTitle":"Patch project dashboard layout"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project dashboard plugin","sidebarTitle":"Post project dashboard plugin"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Delete project dashboard plugin","sidebarTitle":"Delete project dashboard plugin"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Get project dashboard plugin","sidebarTitle":"Get project dashboard plugin"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project dashboard plugin rename","sidebarTitle":"Patch project dashboard plugin rename"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project dashboard plugin update storage","sidebarTitle":"Patch project dashboard plugin update storage"}}}},"/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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project 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\"))"}],"x-mint":{"metadata":{"title":"Export project","sidebarTitle":"Export project","description":"Export a project by its ID."}}}},"/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 project","summary":"publish or unpublish a project","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 project 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\"))"}],"x-mint":{"metadata":{"title":"Publish or unpublish project","sidebarTitle":"Publish or unpublish project","description":"Change whether a project is published for sharing."}}}},"/base/import":{"post":{"description":"import a project","summary":"import a project","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\"))"}],"x-mint":{"metadata":{"title":"Import project","sidebarTitle":"Import project","description":"Import a project into the target space."}}}},"/base/import-stream":{"post":{"description":"import a project with SSE progress stream","summary":"import a project 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\"))"}],"x-mint":{"metadata":{"title":"Import project with progress","sidebarTitle":"Import project with progress","description":"Import a project and receive progress updates through server-sent events."}}}},"/base/{baseId}/move":{"put":{"description":"move a project to another space","summary":"move a project 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\"))"}],"x-mint":{"metadata":{"title":"Move project","sidebarTitle":"Move project","description":"Move a project to another space."}}}},"/base/{baseId}/erd":{"get":{"description":"Get the erd of a project","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the erd of a project.","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\"))"}],"x-mint":{"metadata":{"title":"Get project relationship diagram","sidebarTitle":"Get project relationship diagram","description":"Retrieve the entity relationship diagram for a project."}}}},"/space/{spaceId}/base":{"get":{"description":"Get project list by query","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of project.","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\"))"}],"x-mint":{"metadata":{"title":"List projects in space","sidebarTitle":"List projects in space","description":"List projects in the specified space using the supplied query."}}}},"/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 projects 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 projects","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 project 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 project 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\"))"}],"x-mint":{"metadata":{"title":"Clear project or table trash","sidebarTitle":"Clear project or table trash","description":"Clear trash items for the specified project or table."}}}},"/trash/restore/{trashId}":{"post":{"description":"restore a space, project, 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project 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 project."},"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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project."},"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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project."},"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 project, 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 project."},"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 project. 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 project.","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 project."}},"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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project.","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\"))"}],"x-mint":{"metadata":{"title":"Get userlast visitlist project","sidebarTitle":"Get userlast visitlist project"}}}},"/user/last-visit/base-node":{"get":{"description":"Get user last visited project node","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit project 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\"))"}],"x-mint":{"metadata":{"title":"Get userlast visitproject node","sidebarTitle":"Get userlast visitproject node"}}}},"/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 projects 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\"))"}],"x-mint":{"metadata":{"title":"Post project connection","sidebarTitle":"Post project connection"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Delete project connection","sidebarTitle":"Delete project connection"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Get project connection","sidebarTitle":"Get project connection"}}}},"/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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project."},"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 project 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 project","tags":["usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns usage information for the project.","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\"))"}],"x-mint":{"metadata":{"title":"Get project usage","sidebarTitle":"Get project usage"}}}},"/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 project","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 project","content":{"application/json":{"schema":{"type":"object","properties":{"hasIssues":{"type":"boolean"},"linkFieldIssues":{"type":"array","items":{"type":"object","properties":{"baseId":{"type":"string","description":"The project id of the link field with is cross-project"},"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\"))"}],"x-mint":{"metadata":{"title":"Get integrityproject link check","sidebarTitle":"Get integrityproject link check"}}}},"/integrity/base/{baseId}/link-fix?tableId={tableId}":{"post":{"description":"Fix integrity of link fields in a project","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\"))"}],"x-mint":{"metadata":{"title":"Post integrityproject link fix","sidebarTitle":"Post integrityproject link fix"}}}},"/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":"Retrieve a node in a project by its ID.","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\"))"}],"x-mint":{"metadata":{"title":"Get project node","sidebarTitle":"Get project node","description":"Retrieve a node in a project by its ID."}}},"put":{"description":"Update a node in a project by its ID.","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\"))"}],"x-mint":{"metadata":{"title":"Update project node","sidebarTitle":"Update project node","description":"Update a node in a project by its ID."}}},"delete":{"description":"Delete a node from a project by its ID.","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\"))"}],"x-mint":{"metadata":{"title":"Delete project node","sidebarTitle":"Delete project node","description":"Delete a node from a project by its ID."}}}},"/base/{baseId}/node/tree":{"get":{"description":"Retrieve the node hierarchy and maximum folder depth for a project.","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\"))"}],"x-mint":{"metadata":{"title":"Get project node tree","sidebarTitle":"Get project node tree","description":"Retrieve the node hierarchy and maximum folder depth for a project."}}}},"/base/{baseId}/node/list":{"get":{"description":"Retrieve a flat list of nodes in a project.","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\"))"}],"x-mint":{"metadata":{"title":"List project nodes","sidebarTitle":"List project nodes","description":"Retrieve a flat list of nodes in a project."}}}},"/base/{baseId}/node/{nodeId}/move":{"put":{"description":"Move or reorder a node within a project hierarchy.","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\"))"}],"x-mint":{"metadata":{"title":"Move project node","sidebarTitle":"Move project node","description":"Move or reorder a node within a project hierarchy."}}}},"/base/{baseId}/node/folder":{"post":{"description":"Create a folder in a project hierarchy.","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\"))"}],"x-mint":{"metadata":{"title":"Create project folder","sidebarTitle":"Create project folder","description":"Create a folder in a project hierarchy."}}}},"/base/{baseId}/node":{"post":{"description":"Create a node in a project hierarchy.","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 project."},"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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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 project id of the table that this field is linked to, only required for cross project 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\"))"}],"x-mint":{"metadata":{"title":"Create project node","sidebarTitle":"Create project node","description":"Create a node in a project hierarchy."}}}},"/base/{baseId}/node/{nodeId}/duplicate":{"post":{"description":"Create a copy of a node in a project.","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\"))"}],"x-mint":{"metadata":{"title":"Duplicate project node","sidebarTitle":"Duplicate project node","description":"Create a copy of a node in a project."}}}},"/base/{baseId}/node/{nodeId}/permanent":{"delete":{"description":"Permanently delete a node from a project by its ID.","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\"))"}],"x-mint":{"metadata":{"title":"Permanently delete project node","sidebarTitle":"Permanently delete project node","description":"Permanently delete a node from a project by its ID."}}}},"/base/{baseId}/node/folder/{folderId}":{"patch":{"description":"Rename a folder in a project.","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\"))"}],"x-mint":{"metadata":{"title":"Rename project folder","sidebarTitle":"Rename project folder","description":"Rename a folder in a project."}}},"delete":{"description":"Delete a folder from a project and move its children to the 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\"))"}],"x-mint":{"metadata":{"title":"Delete project folder","sidebarTitle":"Delete project folder","description":"Delete a folder from a project and move its children to the parent."}}}},"/base/{baseId}/share":{"post":{"description":"Create a project 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 project 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\"))"}],"x-mint":{"metadata":{"title":"Create project share link","sidebarTitle":"Create project share link","description":"Create a project share link."}}},"get":{"description":"List the IDs of shared nodes in a project.","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\"))"}],"x-mint":{"metadata":{"title":"List shared project node IDs","sidebarTitle":"List shared project node IDs","description":"List the IDs of shared nodes in a project."}}}},"/base/{baseId}/share/{shareId}":{"patch":{"description":"Update the settings of a project 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 project 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\"))"}],"x-mint":{"metadata":{"title":"Update project share link","sidebarTitle":"Update project share link","description":"Update the settings of a project share link."}}},"delete":{"description":"Delete a project share link by its 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":"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\"))"}],"x-mint":{"metadata":{"title":"Delete project share link","sidebarTitle":"Delete project share link","description":"Delete a project share link by its ID."}}}},"/base/{baseId}/share/{shareId}/refresh":{"post":{"description":"Generate a new ID for a project 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":"Returns the refreshed project 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\"))"}],"x-mint":{"metadata":{"title":"Refresh project share link","sidebarTitle":"Refresh project share link","description":"Generate a new ID for a project share link."}}}},"/share/{shareId}/base":{"get":{"description":"Retrieve shared project information using a share link ID.","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the shared project 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\"))"}],"x-mint":{"metadata":{"title":"Get shared project","sidebarTitle":"Get shared project","description":"Retrieve shared project information using a share link ID."}}}},"/base/{baseId}/share/node/{nodeId}":{"get":{"description":"Retrieve the share link settings for a node in a project.","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 project 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\"))"}],"x-mint":{"metadata":{"title":"Get project share by node","sidebarTitle":"Get project share by node","description":"Retrieve the share link settings for a node in a project."}}}},"/share/{shareId}/base/auth":{"post":{"description":"Authenticate with a password to access a shared project.","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\"))"}],"x-mint":{"metadata":{"title":"Authenticate shared project","sidebarTitle":"Authenticate shared project","description":"Authenticate with a password to access a shared project."}}}},"/share/{shareId}/base/copy":{"post":{"description":"Copy a shared project to the 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 project to"},"name":{"type":"string","description":"The name of the copied project"},"withRecords":{"type":"boolean","default":true,"description":"Whether to copy records"},"baseId":{"type":"string","description":"The target project ID to copy into. If provided, tables will be added to the existing project instead of creating a new one."}},"required":["spaceId"]}}}},"responses":{"200":{"description":"Returns the copied project","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\"))"}],"x-mint":{"metadata":{"title":"Copy shared project","sidebarTitle":"Copy shared project","description":"Copy a shared project to the target space."}}}},"/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,
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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow action","sidebarTitle":"Get project workflow action"}}},"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,
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\"))"}],"x-mint":{"metadata":{"title":"Put project workflow action","sidebarTitle":"Put project workflow action"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Delete project workflow action","sidebarTitle":"Delete project workflow action"}}}},"/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,
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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow action","sidebarTitle":"Post project workflow action"}}}},"/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,
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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow action duplicate","sidebarTitle":"Post project workflow action duplicate"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow action script input","sidebarTitle":"Get project workflow action script input"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow logic","sidebarTitle":"Get project workflow logic"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Put project workflow logic","sidebarTitle":"Put project workflow logic"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Delete project workflow logic","sidebarTitle":"Delete project workflow logic"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow logic","sidebarTitle":"Post project workflow logic"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow trigger","sidebarTitle":"Get project workflow trigger"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Put project workflow trigger","sidebarTitle":"Put project workflow trigger"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow trigger","sidebarTitle":"Post project workflow trigger"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow trigger generate webhook token","sidebarTitle":"Post project workflow trigger generate webhook token"}}}},"/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 project 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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow","sidebarTitle":"Get project workflow"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Put project workflow","sidebarTitle":"Put project workflow"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Delete project workflow","sidebarTitle":"Delete project workflow"}}}},"/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 project 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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow active snapshot","sidebarTitle":"Get project workflow active snapshot"}}}},"/base/{baseId}/workflow":{"get":{"description":"get automation workflow list in project","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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow 1","sidebarTitle":"Get project workflow 1"}}},"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 project 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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow","sidebarTitle":"Post project workflow"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Put project workflow active","sidebarTitle":"Put project workflow active"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow run","sidebarTitle":"Get project workflow run"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow run 1","sidebarTitle":"Get project workflow run 1"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project workflow runsummary","sidebarTitle":"Get project workflow runsummary"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow test","sidebarTitle":"Post project workflow test"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow test all","sidebarTitle":"Post project workflow test all"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Put project workflow order","sidebarTitle":"Put project workflow order"}}}},"/base/{baseId}/workflow/{tableId}/filter-link-records":{"post":{"description":"get automation workflow list in project","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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow filter link records","sidebarTitle":"Post project workflow filter link records"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project workflow duplicate","sidebarTitle":"Post project workflow duplicate"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrixstatus","sidebarTitle":"Patch project authority matrixstatus"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project authority matrix","sidebarTitle":"Get project authority matrix"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Put project authority matrix","sidebarTitle":"Put project authority matrix"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrixadmin user","sidebarTitle":"Patch project authority matrixadmin user"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project authority matrix role","sidebarTitle":"Post project authority matrix role"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Get project authority matrix role","sidebarTitle":"Get project authority matrix role"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Delete project authority matrix role","sidebarTitle":"Delete project authority matrix role"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Put project authority matrix role","sidebarTitle":"Put project authority matrix role"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Get project authority matrix role 1","sidebarTitle":"Get project authority matrix role 1"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrix role status","sidebarTitle":"Patch project authority matrix role status"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrix role name","sidebarTitle":"Patch project authority matrix role name"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrix role description","sidebarTitle":"Patch project authority matrix role description"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project authority matrix role user","sidebarTitle":"Patch project authority matrix role user"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project authority matrix role duplicate","sidebarTitle":"Post project authority matrix role duplicate"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project authority matrix role table filter link records","sidebarTitle":"Get project authority matrix role table filter link records"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project app files","sidebarTitle":"Patch project app files"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project app props","sidebarTitle":"Patch project app props"}}}},"/base/{baseId}/app/{appId}/run":{"post":{"description":"Run the app code","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project 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\"))"}],"x-mint":{"metadata":{"title":"Post project app run","sidebarTitle":"Post project app run"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project app export code","sidebarTitle":"Get project app export code"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project app import code","sidebarTitle":"Post project app import code"}}}},"/base/{baseId}/app/{appId}/deploy":{"post":{"description":"Deploy app to Vercel","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project 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\"))"}],"x-mint":{"metadata":{"title":"Post project app deploy","sidebarTitle":"Post project app deploy"}}}},"/base/{baseId}/app/{appId}/deploy/status":{"get":{"description":"Get app deployment status","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project 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\"))"}],"x-mint":{"metadata":{"title":"Get project app deploystatus","sidebarTitle":"Get project app deploystatus"}}}},"/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 project","summary":"Execute SQL query","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The project ID to execute query on"},"required":true,"description":"The project 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\"))"}],"x-mint":{"metadata":{"title":"Execute project SQL query","sidebarTitle":"Execute project SQL query","description":"Execute a SQL query on tables in a project."}}}},"/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 project ID"},"required":true,"description":"The project 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\"))"}],"x-mint":{"metadata":{"title":"Sign project attachment URLs","sidebarTitle":"Sign project attachment URLs","description":"Generate signed URLs for attachment files in a project."}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project chatcreate","sidebarTitle":"Post project chatcreate"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project chat messages","sidebarTitle":"Get project chat messages"}}},"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\"))"}],"x-mint":{"metadata":{"title":"Delete project chat messages","sidebarTitle":"Delete project chat messages"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Get project chathistory","sidebarTitle":"Get project chathistory"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Delete project chat delete","sidebarTitle":"Delete project chat delete"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Patch project chat rename","sidebarTitle":"Patch project chat rename"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project chat stop","sidebarTitle":"Post project chat stop"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project chatsuggestions","sidebarTitle":"Post project chatsuggestions"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project chattext extract","sidebarTitle":"Post project chattext extract"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project chatexecute script","sidebarTitle":"Post project chatexecute script"}}}},"/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\"))"}],"x-mint":{"metadata":{"title":"Post project chatresolve attachments","sidebarTitle":"Post project chatresolve attachments"}}}},"/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\"))"}]}}},"tags":[{"name":"base","x-group":"project"},{"name":"base node","x-group":"project node"},{"name":"base-share","x-group":"project-share"}]}
+{"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"}],"tags":[{"name":"base","x-group":"project"},{"name":"base node","x-group":"project node"},{"name":"base-share","x-group":"project-share"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"},"cookieAuth":{"type":"apiKey","in":"cookie","name":"auth_session"}},"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.\n\nRequired token scopes: `record|read`","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.\n\nRequired token scopes: `record|update`","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.\n\nRequired token scopes: `record|delete`","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.\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"required":false,"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes.","name":"includeQueryExtra","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"},{"schema":{"type":"string","minLength":1,"description":"Opaque keyset cursor for the next page. Use the nextCursor returned by the previous page; it encodes the last row position for the current order. Cannot be combined with skip > 0."},"required":false,"description":"Opaque keyset cursor for the next page. Use the nextCursor returned by the previous page; it encodes the last row position for the current order. Cannot be combined with skip > 0.","name":"cursor","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"},"nextCursor":{"type":"string","minLength":1,"description":"Keyset cursor for fetching the next page without OFFSET"}}}},"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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&cursor=SOME_STRING_VALUE' \\\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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&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/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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&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/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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&cursor=SOME_STRING_VALUE\", 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.\n\nRequired token scopes: `record|create`","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.\n\nRequired token scopes: `record|update`","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.\n\nRequired token scopes: `record|delete`","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.\n\nRequired token scopes: `record|create`, `record|read`","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/{spaceId}/base-entry-map":{"get":{"description":"Resolve the entry URL (last visited table and view) of the accessible projects in a space, so project-list clicks can navigate straight to the final URL\n\nRequired token scopes: `base|read`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Resolve at most this many projects, in project-list order; omitted means the whole list"},"required":false,"description":"Resolve at most this many projects, in project-list order; omitted means the whole list","name":"take","in":"query"}],"responses":{"200":{"description":"Returns a map of baseId to entry URL pathname.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/base-entry-map?take=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/base-entry-map?take=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/base-entry-map?take=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/base-entry-map?take=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/data-db/preflight":{"post":{"description":"Validate a PostgreSQL data database before binding it to a space\n\nRequired token scopes: `space|create`","tags":["space"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","minLength":1},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["initialize-empty","migrate-space","adopt-existing"],"default":"initialize-empty"},"internalSchema":{"type":"string","pattern":"^[a-z_]\\w*$/i"},"confirmLargeMigration":{"type":"boolean"},"switchOnCompletion":{"type":"boolean"}},"required":["url"]}}}},"responses":{"200":{"description":"Returns PostgreSQL data database validation details.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"provider":{"type":"string","enum":["postgres"]},"maskedUrl":{"type":"string"},"urlFingerprint":{"type":"string"},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"serverVersion":{"type":"string"},"classification":{"type":"string","enum":["empty","teable-managed-compatible","teable-managed-incompatible","non-empty-unknown"]},"availableDatabases":{"type":"array","items":{"type":"string"}},"requiresDatabaseSelection":{"type":"boolean"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"remediation":{"type":"string"}},"required":["code","message"]}}},"required":["ok","provider","classification","capabilities","errors"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/data-db/preflight \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"url\":\"string\",\"spaceId\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"confirmLargeMigration\":true,\"switchOnCompletion\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/data-db/preflight';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"url\":\"string\",\"spaceId\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"confirmLargeMigration\":true,\"switchOnCompletion\":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/space/data-db/preflight',\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 url: 'string',\n spaceId: 'string',\n targetMode: 'initialize-empty',\n internalSchema: 'string',\n confirmLargeMigration: true,\n switchOnCompletion: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"url\\\":\\\"string\\\",\\\"spaceId\\\":\\\"string\\\",\\\"targetMode\\\":\\\"initialize-empty\\\",\\\"internalSchema\\\":\\\"string\\\",\\\"confirmLargeMigration\\\":true,\\\"switchOnCompletion\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/data-db/preflight\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/data-db":{"get":{"description":"Get the data database binding summary for a space\n\nRequired token scopes: `space|read`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["true","false"]}]},"required":false,"name":"includeRelatedSpaces","in":"query"}],"responses":{"200":{"description":"Returns the data database binding summary for a space.","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/data-db?includeRelatedSpaces=SOME_BOOLEAN_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/data-db?includeRelatedSpaces=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/space/%7BspaceId%7D/data-db?includeRelatedSpaces=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/space/%7BspaceId%7D/data-db?includeRelatedSpaces=SOME_BOOLEAN_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update PostgreSQL credentials or connection parameters for the existing BYODB database\n\nRequired token scopes: `space|update`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","minLength":1},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["initialize-empty","migrate-space","adopt-existing"],"default":"initialize-empty"},"internalSchema":{"type":"string","pattern":"^[a-z_]\\w*$/i"},"confirmLargeMigration":{"type":"boolean"},"switchOnCompletion":{"type":"boolean"}},"required":["url"]}}}},"responses":{"200":{"description":"Returns the refreshed data database binding summary.","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/data-db \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"url\":\"string\",\"spaceId\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"confirmLargeMigration\":true,\"switchOnCompletion\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/data-db';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"url\":\"string\",\"spaceId\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"confirmLargeMigration\":true,\"switchOnCompletion\":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/space/%7BspaceId%7D/data-db',\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 url: 'string',\n spaceId: 'string',\n targetMode: 'initialize-empty',\n internalSchema: 'string',\n confirmLargeMigration: true,\n switchOnCompletion: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"url\\\":\\\"string\\\",\\\"spaceId\\\":\\\"string\\\",\\\"targetMode\\\":\\\"initialize-empty\\\",\\\"internalSchema\\\":\\\"string\\\",\\\"confirmLargeMigration\\\":true,\\\"switchOnCompletion\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/data-db\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/data-db/retest":{"post":{"description":"Retest the PostgreSQL data database connection for a BYODB space\n\nRequired token scopes: `space|update`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the refreshed data database binding summary.","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/data-db/retest \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/data-db/retest';\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/space/%7BspaceId%7D/data-db/retest',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/space/%7BspaceId%7D/data-db/retest\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/data-db/retry":{"post":{"description":"Retry pending PostgreSQL data database migrations for a BYODB space\n\nRequired token scopes: `space|update`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the refreshed data database binding summary.","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/data-db/retry \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/data-db/retry';\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/space/%7BspaceId%7D/data-db/retry',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/space/%7BspaceId%7D/data-db/retry\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/data-db/migration/{jobId}":{"get":{"description":"Get detailed status for a space data database migration job\n\nRequired token scopes: `space|read`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Returns the migration job status without connection secrets.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["migrate-space"]},"switchOnCompletion":{"type":"boolean"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"targetConnection":{"type":"object","nullable":true,"properties":{"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]}},"required":["provider"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]},"inventory":{"nullable":true},"copyStats":{"nullable":true},"validationStats":{"nullable":true},"lastError":{"type":"string","nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["jobId","spaceId","targetMode","state","targetInternalSchema","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/data-db/migration/%7BjobId%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/data-db/migration/%7BjobId%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/data-db/migration/%7BjobId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/data-db/migration/{jobId}/cancel":{"post":{"description":"Cancel a pre-copy space data database migration job\n\nRequired token scopes: `space|update`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Returns the canceled migration job status without connection secrets.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["migrate-space"]},"switchOnCompletion":{"type":"boolean"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"targetConnection":{"type":"object","nullable":true,"properties":{"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]}},"required":["provider"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]},"inventory":{"nullable":true},"copyStats":{"nullable":true},"validationStats":{"nullable":true},"lastError":{"type":"string","nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["jobId","spaceId","targetMode","state","targetInternalSchema","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/cancel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/cancel';\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/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/cancel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/cancel\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/data-db/migration/{jobId}/rollback":{"post":{"description":"Rollback a completed space data database migration when no post-switch writes exist\n\nRequired token scopes: `space|update`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Returns the rolled back migration job status without connection secrets.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["migrate-space"]},"switchOnCompletion":{"type":"boolean"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"targetConnection":{"type":"object","nullable":true,"properties":{"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]}},"required":["provider"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]},"inventory":{"nullable":true},"copyStats":{"nullable":true},"validationStats":{"nullable":true},"lastError":{"type":"string","nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["jobId","spaceId","targetMode","state","targetInternalSchema","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/rollback \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/rollback';\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/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/rollback',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/rollback\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space":{"post":{"description":"Create a space\n\nRequired token scopes: `space|create`","tags":["space"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"dataDb":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"url":{"type":"string","minLength":1},"targetMode":{"type":"string","enum":["initialize-empty","migrate-space","adopt-existing"],"default":"initialize-empty"},"internalSchema":{"type":"string","pattern":"^[a-z_]\\w*$/i"},"preflightToken":{"type":"string"}},"required":["mode"]}}}}}},"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\",\"dataDb\":{\"mode\":\"default\",\"url\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"preflightToken\":\"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\",\"dataDb\":{\"mode\":\"default\",\"url\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"preflightToken\":\"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({\n name: 'string',\n dataDb: {\n mode: 'default',\n url: 'string',\n targetMode: 'initialize-empty',\n internalSchema: 'string',\n preflightToken: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"dataDb\\\":{\\\"mode\\\":\\\"default\\\",\\\"url\\\":\\\"string\\\",\\\"targetMode\\\":\\\"initialize-empty\\\",\\\"internalSchema\\\":\\\"string\\\",\\\"preflightToken\\\":\\\"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\n\nRequired token scopes: `space|read`","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"},"avatar":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"dataDb":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}},"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\n\nRequired token scopes: `space|delete`","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\n\nRequired token scopes: `space|read`","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"},"avatar":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"dataDb":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}},"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\n\nRequired token scopes: `space|update`","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","minLength":1,"maxLength":100},"dataDb":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"url":{"type":"string","minLength":1},"targetMode":{"type":"string","enum":["initialize-empty","migrate-space","adopt-existing"],"default":"initialize-empty"},"internalSchema":{"type":"string","pattern":"^[a-z_]\\w*$/i"},"preflightToken":{"type":"string"}},"required":["mode"]}}}}}},"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\",\"dataDb\":{\"mode\":\"default\",\"url\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"preflightToken\":\"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\",\"dataDb\":{\"mode\":\"default\",\"url\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"preflightToken\":\"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({\n name: 'string',\n dataDb: {\n mode: 'default',\n url: 'string',\n targetMode: 'initialize-empty',\n internalSchema: 'string',\n preflightToken: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"dataDb\\\":{\\\"mode\\\":\\\"default\\\",\\\"url\\\":\\\"string\\\",\\\"targetMode\\\":\\\"initialize-empty\\\",\\\"internalSchema\\\":\\\"string\\\",\\\"preflightToken\\\":\\\"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}/avatar":{"patch":{"description":"Update space avatar\n\nRequired token scopes: `space|update`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"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/space/%7BspaceId%7D/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/space/%7BspaceId%7D/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/space/%7BspaceId%7D/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/space/%7BspaceId%7D/avatar\", 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\n\nRequired token scopes: `space|invite_link`","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\n\nRequired token scopes: `space|invite_link`","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\n\nRequired token scopes: `space|invite_link`","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\n\nRequired token scopes: `space|invite_link`","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\n\nRequired token scopes: `space|invite_email`","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\n\nRequired token scopes: `space|read`","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"},{"schema":{"type":"string"},"required":false,"name":"principalId","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"},"lastSignTime":{"type":"string","nullable":true},"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&principalId=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&principalId=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&principalId=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&principalId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a collaborator\n\nRequired token scopes: `space|read`","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\n\nRequired token scopes: `space|read`","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\"))"}]}},"/space/{spaceId}/collaborators/unique":{"get":{"description":"List space collaborators deduplicated by principal, with space role and project permission count\n\nRequired token scopes: `space|read`","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":"integer","nullable":true,"minimum":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000},"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 unique space collaborator list.","content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["user"]},"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"isSystem":{"type":"boolean"},"lastSignTime":{"type":"string","nullable":true},"spaceRole":{"type":"string","nullable":true,"enum":["owner","creator","editor","commenter","viewer"]},"baseCount":{"type":"number"},"createdTime":{"type":"string"},"billable":{"type":"boolean"}},"required":["type","userId","userName","email","avatar","spaceRole","baseCount","createdTime"]},{"type":"object","properties":{"type":{"type":"string","enum":["department"]},"departmentId":{"type":"string"},"departmentName":{"type":"string"},"spaceRole":{"type":"string","nullable":true,"enum":["owner","creator","editor","commenter","viewer"]},"baseCount":{"type":"number"},"createdTime":{"type":"string"}},"required":["type","departmentId","departmentName","spaceRole","baseCount","createdTime"]}]}},"total":{"type":"number"}},"required":["collaborators","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborators/unique?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_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/unique?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_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/unique?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_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/unique?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_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\"))"}]}},"/space/{spaceId}/collaborators/base":{"delete":{"description":"Delete all of a principal's project-level collaborator rows within the space\n\nRequired token scopes: `space|read`","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/base?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/base?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/base?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/base?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base":{"post":{"description":"Create a project in the specified space.\n\nRequired token scopes: `base|create`","tags":["base"],"x-mint":{"metadata":{"title":"Create project","sidebarTitle":"Create project","description":"Create a project in the specified space."}},"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 project.","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":"Move a project to the trash by its ID.\n\nRequired token scopes: `base|delete`","tags":["base"],"x-mint":{"metadata":{"title":"Delete project","sidebarTitle":"Delete project","description":"Move a project to the trash by its ID."}},"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":"Retrieve a project by its ID.\n\nRequired token scopes: `base|read`","tags":["base"],"x-mint":{"metadata":{"title":"Get project","sidebarTitle":"Get project","description":"Retrieve a project by its ID."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns information about a project.","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"},"personalOrder":{"type":"number"},"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"},"v2Status":{"type":"object","properties":{"useV2":{"type":"boolean"},"reason":{"type":"string","enum":["env_force_v2_all","config_force_v2_all","new_base","header_override","space_feature","unsupported_feature","disabled","feature_not_enabled","no_feature"]}},"required":["useV2","reason"]},"isShared":{"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 project's name or icon.\n\nRequired token scopes: `base|update`","tags":["base"],"x-mint":{"metadata":{"title":"Patch project","sidebarTitle":"Update project","description":"Update a project's name or icon."}},"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","nullable":true}}}}}},"responses":{"200":{"description":"Returns information about a successfully updated project.","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\n\nRequired token scopes: `view|update`","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":"Change a project's position in its space.\n\nRequired token scopes: `base|update`","tags":["base"],"x-mint":{"metadata":{"title":"Put project order","sidebarTitle":"Update project order","description":"Change a project's position in its space."}},"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/{baseId}/personal-order":{"put":{"description":"Move a project before/after another one in the caller's own arrangement of that space (see `GET /base/access/all?orderBy=personal`). The first move in a space freezes the order the caller currently sees; nobody else is affected.\n\nRequired token scopes: `base|read`","tags":["base"],"x-mint":{"metadata":{"title":"Update personal project order","sidebarTitle":"Update personal project order","description":"Move a project before/after another one in the caller's own arrangement of that space (see `GET /base/access/all?orderBy=personal`). The first move in a space freezes the order the caller currently sees; nobody else is affected."}},"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":"Personal order updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/personal-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/personal-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/personal-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/personal-order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/personal-order/{spaceId}":{"delete":{"description":"Forget the caller's own arrangement of a space's projects; the personal list goes back to last-visit recency.\n\nRequired token scopes: `base|read_all`","tags":["base"],"x-mint":{"metadata":{"title":"Reset personal project order","sidebarTitle":"Reset personal project order","description":"Forget the caller's own arrangement of a space's projects; the personal list goes back to last-visit recency."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Personal order reset"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/personal-order/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/personal-order/%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/base/personal-order/%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/base/personal-order/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/access/all":{"get":{"summary":"Get all project list","description":"List projects accessible to the current user using the supplied query.\n\nRequired token scopes: `base|read_all`","tags":["base"],"x-mint":{"metadata":{"title":"List accessible projects","sidebarTitle":"List accessible projects","description":"List projects accessible to the current user using the supplied query."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","personal"]},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"Returns the list of projects accessible to the current user.","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"},"personalOrder":{"type":"number"},"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"},"v2Status":{"type":"object","properties":{"useV2":{"type":"boolean"},"reason":{"type":"string","enum":["env_force_v2_all","config_force_v2_all","new_base","header_override","space_feature","unsupported_feature","disabled","feature_not_enabled","no_feature"]}},"required":["useV2","reason"]},"isShared":{"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?orderBy=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/access/all?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/access/all?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/access/all?orderBy=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/collaborators":{"get":{"description":"List the collaborators of a project.\n\nRequired token scopes: `base|read`","tags":["base"],"x-mint":{"metadata":{"title":"List project collaborators","sidebarTitle":"List project collaborators","description":"List the collaborators of a project."}},"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 project 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"},"lastSignTime":{"type":"string","nullable":true},"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":"Remove the specified user or department from a project.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["base"],"x-mint":{"metadata":{"title":"Remove project collaborator","sidebarTitle":"Remove project collaborator","description":"Remove the specified user or department from a project."}},"security":[{"cookieAuth":[]}],"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-excluded":true,"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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a collaborator's role in a project.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["base"],"x-mint":{"metadata":{"title":"Update project collaborator","sidebarTitle":"Update project collaborator","description":"Update a collaborator's role in a project."}},"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/collaborators \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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":"Create a copy of a project in the target space.\n\nRequired token scopes: `base|create`","tags":["base"],"x-mint":{"metadata":{"title":"Duplicate project","sidebarTitle":"Duplicate project","description":"Create a copy of a project in the target space."}},"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 project to duplicate"},"spaceId":{"type":"string","description":"The space to duplicate the project to"},"withRecords":{"type":"boolean","description":"Whether to duplicate the records"},"name":{"type":"string","description":"The name of the duplicated project"},"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 project. If provided, will use share permissions instead of base|update permission."},"timeZone":{"type":"string","description":"The IANA time zone to adapt date-related field options (and date filters) to during duplication. Mainly used when applying a template so dates follow the current user environment."}},"required":["fromBaseId","spaceId"]}}}},"responses":{"201":{"description":"Returns information about a successfully duplicated project.","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\",\"timeZone\":\"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\",\"timeZone\":\"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 timeZone: '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\\\",\\\"timeZone\\\":\\\"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/duplicate-stream":{"post":{"description":"Duplicate a project and receive progress updates and the final result through server-sent events.\n\nRequired token scopes: `base|create`","tags":["base"],"x-mint":{"metadata":{"title":"Duplicate project with progress","sidebarTitle":"Duplicate project with progress","description":"Duplicate a project and receive progress updates and the final result through server-sent events."}},"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fromBaseId":{"type":"string","description":"The project to duplicate"},"spaceId":{"type":"string","description":"The space to duplicate the project to"},"withRecords":{"type":"boolean","description":"Whether to duplicate the records"},"name":{"type":"string","description":"The name of the duplicated project"},"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 project. If provided, will use share permissions instead of base|update permission."},"timeZone":{"type":"string","description":"The IANA time zone to adapt date-related field options (and date filters) to during duplication. Mainly used when applying a template so dates follow the current user environment."}},"required":["fromBaseId","spaceId"]}}}},"responses":{"201":{"description":"SSE stream with progress events and final duplicated project."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/duplicate-stream \\\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\",\"timeZone\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/duplicate-stream';\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\",\"timeZone\":\"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-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 fromBaseId: 'string',\n spaceId: 'string',\n withRecords: true,\n name: 'string',\n baseId: 'string',\n nodes: ['string'],\n shareId: 'string',\n timeZone: '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\\\",\\\"timeZone\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/duplicate-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/duplicate-check":{"get":{"description":"Check the cross-space link/lookup/rollup fields that would be converted if this project were duplicated into the given target space.\n\nRequired token scopes: `base|read`","summary":"Check cross-space affected fields for project duplicate","tags":["base"],"x-mint":{"metadata":{"title":"Check project duplication requirements","sidebarTitle":"Check project duplication requirements","description":"Check the cross-space link/lookup/rollup fields that would be converted if this project were duplicated into the given target space."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"destSpaceId","in":"query"}],"responses":{"200":{"description":"The list of cross-space affected fields grouped by table.","content":{"application/json":{"schema":{"type":"object","properties":{"affectedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"type":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"}},"required":["fieldId","fieldName","type","tableId","tableName"]}}},"required":["affectedFields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/duplicate-check?destSpaceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/duplicate-check?destSpaceId=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/duplicate-check?destSpaceId=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/duplicate-check?destSpaceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/create-from-template":{"post":{"summary":"Create a project from template or apply a template to a project","description":"Create a project from a template or apply a template to an existing project.\n\nRequired token scopes: `base|create`","tags":["base"],"x-mint":{"metadata":{"title":"Create or update project from template","sidebarTitle":"Create or update project from template","description":"Create a project from a template or apply a template to an existing project."}},"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The space id to create a project from"},"templateId":{"type":"string","description":"The template id to create a project from"},"withRecords":{"type":"boolean","description":"Whether to create records from the template"},"baseId":{"type":"string","description":"The project id to apply the template to"},"timeZone":{"type":"string","description":"The IANA time zone of the user; date-related field options in the template will be adapted to it"}},"required":["spaceId","templateId"]}}}},"responses":{"201":{"description":"Returns information about a successfully created project.","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\",\"timeZone\":\"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\",\"timeZone\":\"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({\n spaceId: 'string',\n templateId: 'string',\n withRecords: true,\n baseId: 'string',\n timeZone: 'string'\n}));\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\\\",\\\"timeZone\\\":\\\"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":"Retrieve the current user's permissions for a project.\n\nRequired token scopes: `base|read`","tags":["base"],"x-mint":{"metadata":{"title":"Get project permissions","sidebarTitle":"Get project permissions","description":"Retrieve the current user's permissions for a project."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about a project 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 invitation links for a project.\n\nRequired token scopes: `base|invite_link`","tags":["base"],"x-mint":{"metadata":{"title":"List project invitation links","sidebarTitle":"List project invitation links","description":"List invitation links for a project."}},"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 link for inviting collaborators to a project.\n\nRequired token scopes: `base|invite_link`","tags":["base"],"x-mint":{"metadata":{"title":"Create project invitation link","sidebarTitle":"Create project invitation link","description":"Create a link for inviting collaborators to a project."}},"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 project's invitation link by its ID.\n\nRequired token scopes: `base|invite_link`","tags":["base"],"x-mint":{"metadata":{"title":"Delete project invitation link","sidebarTitle":"Delete project invitation link","description":"Delete a project's invitation link by its ID."}},"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 project's invitation link settings.\n\nRequired token scopes: `base|invite_link`","tags":["base"],"x-mint":{"metadata":{"title":"Update project invitation link","sidebarTitle":"Update project invitation link","description":"Update a project's invitation link settings."}},"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 email invitations to join a project.\n\nRequired token scopes: `base|invite_email`","tags":["base"],"x-mint":{"metadata":{"title":"Invite project collaborators by email","sidebarTitle":"Invite project collaborators by email","description":"Send email invitations to join a project."}},"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":{"description":"List projects shared with the current user or their departments.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["base"],"x-mint":{"metadata":{"title":"List projects shared with me","sidebarTitle":"List projects shared with me","description":"List projects shared with the current user or their departments."}},"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Returns information about a shared project.","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"},"personalOrder":{"type":"number"},"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"},"v2Status":{"type":"object","properties":{"useV2":{"type":"boolean"},"reason":{"type":"string","enum":["env_force_v2_all","config_force_v2_all","new_base","header_override","space_feature","unsupported_feature","disabled","feature_not_enabled","no_feature"]}},"required":["useV2","reason"]},"isShared":{"type":"boolean"},"spaceName":{"type":"string"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/shared-base"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/shared-base';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/base/shared-base\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/permanent":{"delete":{"description":"Permanently delete a project by its ID.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["base"],"x-mint":{"metadata":{"title":"Permanently delete project","sidebarTitle":"Permanently delete project","description":"Permanently delete a project by its ID."}},"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/permanent"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/permanent';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/permanent\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/collaborator":{"post":{"description":"Add a collaborator to a space\n\nRequired token scopes: `space|read`","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 project with the specified role.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["base"],"x-mint":{"metadata":{"title":"Add project collaborator","sidebarTitle":"Add project collaborator","description":"Add a collaborator to a project with the specified role."}},"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/collaborator \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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 project collaborator user list","description":"List the user accounts that collaborate on a project.\n\nRequired token scopes: `base|read`","tags":["base"],"x-mint":{"metadata":{"title":"List project collaborator users","sidebarTitle":"List project collaborator users","description":"List the user accounts that collaborate on a project."}},"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 project 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\"))"}]}},"/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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"confirm","in":"path"}],"responses":{"200":{"description":"Successfully deleted user"},"400":{"description":"User has deleted projects 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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/auth/user"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/auth/user\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard":{"get":{"description":"Get a list of dashboards in project\n\nRequired token scopes: `base|read`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Get project dashboard","sidebarTitle":"Get project dashboard","description":"Get a list of dashboards in project"}},"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\n\nRequired token scopes: `base|update`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Post project dashboard","sidebarTitle":"Post project dashboard","description":"Create a new 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\n\nRequired token scopes: `base|read`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Get project dashboard 1","sidebarTitle":"Get project dashboard 1","description":"Get a dashboard by id"}},"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\n\nRequired token scopes: `base|update`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Delete project dashboard","sidebarTitle":"Delete project dashboard","description":"Delete a dashboard by id"}},"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\n\nRequired token scopes: `base|update`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Patch project dashboard rename","sidebarTitle":"Patch project dashboard rename","description":"Rename a dashboard by id"}},"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\n\nRequired token scopes: `base|update`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Patch project dashboard layout","sidebarTitle":"Patch project dashboard layout","description":"Update a dashboard layout by id"}},"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\n\nRequired token scopes: `base|update`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Post project dashboard plugin","sidebarTitle":"Post project dashboard plugin","description":"Install a plugin to a 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\n\nRequired token scopes: `base|update`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Delete project dashboard plugin","sidebarTitle":"Delete project dashboard plugin","description":"Remove a plugin from a 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\n\nRequired token scopes: `base|read`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Get project dashboard plugin","sidebarTitle":"Get project dashboard plugin","description":"Get a dashboard install plugin by id"}},"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\n\nRequired token scopes: `base|update`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Patch project dashboard plugin rename","sidebarTitle":"Patch project dashboard plugin rename","description":"Rename a plugin in a 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":{"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\n\nRequired token scopes: `base|update`","tags":["dashboard"],"x-mint":{"metadata":{"title":"Patch project dashboard plugin update storage","sidebarTitle":"Patch project dashboard plugin update storage","description":"Update storage of a plugin in a 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\n\nRequired token scopes: `base|update`","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\n\nRequired token scopes: `base|update`","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"},{"schema":{"type":"string"},"required":true,"name":"installedId","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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["plugin"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["plugin"],"security":[{"cookieAuth":[]}],"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"]},"isSystem":{"type":"boolean"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","i18n","status","createdTime","lastModifiedTime"]}}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/plugin"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/plugin\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{id}":{"delete":{"description":"Delete a plugin\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["plugin"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns no content."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/plugin/%7Bid%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/plugin/%7Bid%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a plugin\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["plugin"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/plugin/%7Bid%7D \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["plugin"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin/%7Bid%7D/regenerate-secret"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D/regenerate-secret';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/plugin/%7Bid%7D/regenerate-secret\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}":{"get":{"description":"Get a plugin\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["plugin"],"security":[{"cookieAuth":[]}],"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"]},"isSystem":{"type":"boolean"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime","lastModifiedTime"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/plugin/%7BpluginId%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/center/list":{"get":{"description":"Get a list of plugins center\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["plugin"],"security":[{"cookieAuth":[]}],"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-excluded":true,"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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/submit":{"patch":{"description":"Submit a plugin\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["plugin"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin submitted successfully."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/submit"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/submit';\nconst options = {method: 'PATCH'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"PATCH\", \"/api/plugin/%7BpluginId%7D/submit\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/token":{"post":{"description":"Get a token","tags":["plugin"],"security":[],"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","enum":["base|read","base|update","base|invite_email","base|invite_link","base|table_import","base|table_export","base|authority_matrix_config","base|db_connection","base|query_data","table|create","table|delete","table|read","table|update","table|import","table|export","table|trash_read","table|trash_update","table|trash_reset","table|archive_read","table|archive_manage","view|create","view|delete","view|read","view|update","view|share","field|create","field|delete","field|read","field|update","record|create","record|delete","record|read","record|update","record|comment","record|copy","record|archive","table_record_history|read","automation|create","automation|delete","automation|read","automation|update","app|create","app|delete","app|read","app|update"]},"minItems":1},"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","enum":["base|read","base|update","base|invite_email","base|invite_link","base|table_import","base|table_export","base|authority_matrix_config","base|db_connection","base|query_data","table|create","table|delete","table|read","table|update","table|import","table|export","table|trash_read","table|trash_update","table|trash_reset","table|archive_read","table|archive_manage","view|create","view|delete","view|read","view|update","view|share","field|create","field|delete","field|read","field|update","record|create","record|delete","record|read","record|update","record|comment","record|copy","record|archive","table_record_history|read","automation|create","automation|delete","automation|read","automation|update","app|create","app|delete","app|read","app|update"]},"minItems":1},"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/token \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\",\"secret\":\"string\",\"scopes\":[\"base|read\"],\"authCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/token';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"baseId\":\"string\",\"secret\":\"string\",\"scopes\":[\"base|read\"],\"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: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/token',\n headers: {\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: ['base|read'], 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\\\":[\\\"base|read\\\"],\\\"authCode\\\":\\\"string\\\"}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/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":[],"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","enum":["base|read","base|update","base|invite_email","base|invite_link","base|table_import","base|table_export","base|authority_matrix_config","base|db_connection","base|query_data","table|create","table|delete","table|read","table|update","table|import","table|export","table|trash_read","table|trash_update","table|trash_reset","table|archive_read","table|archive_manage","view|create","view|delete","view|read","view|update","view|share","field|create","field|delete","field|read","field|update","record|create","record|delete","record|read","record|update","record|comment","record|copy","record|archive","table_record_history|read","automation|create","automation|delete","automation|read","automation|update","app|create","app|delete","app|read","app|update"]},"minItems":1},"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nRequired token scopes: `base|read`","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":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin unpublished successfully."}},"x-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token.","x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/unpublish"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/unpublish';\nconst options = {method: 'PATCH'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"PATCH\", \"/api/plugin/%7BpluginId%7D/unpublish\")\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\n\nRequired token scopes: `base|read`","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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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\n\nRequired token scopes: `table|read`","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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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 project by its ID.\n\nRequired token scopes: `base|update`","tags":["base"],"x-mint":{"metadata":{"title":"Export project","sidebarTitle":"Export project","description":"Export a project by its ID."}},"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\"))"}]}},"/base/{baseId}/export-stream":{"get":{"description":"Export a project by its ID and receive progress updates and the final result through server-sent events.\n\nRequired token scopes: `base|update`","tags":["base"],"x-mint":{"metadata":{"title":"Export project with progress","sidebarTitle":"Export project with progress","description":"Export a project by its ID and receive progress updates and the final result through server-sent events."}},"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":"SSE stream with progress events and final export result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/export-stream?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-stream?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-stream?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-stream?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\n\nRequired token scopes: `instance|update`","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/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"},"type":{"type":"integer","enum":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"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,\"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,\"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 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,\\\"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":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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":[],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"},{"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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template":{"get":{"description":"get template list\n\nRequired token scopes: `instance|update`","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":[],"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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/snapshot":{"post":{"description":"create a template snapshot\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["template"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Successfully get template category list."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/template/category/list"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/list';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/template/category/list\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/{templateCategoryId}":{"delete":{"description":"delete a template category\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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\n\nSession (cookie) authentication only. Not callable with an access token.","summary":"get template by baseId","tags":["template"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/template/by-base/%7BbaseId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/by-base/%7BbaseId%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/template/by-base/%7BbaseId%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/unpublish/{templateId}":{"delete":{"description":"unpublish a template\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["template"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully unpublish template."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/template/unpublish/%7BtemplateId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/unpublish/%7BtemplateId%7D';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/template/unpublish/%7BtemplateId%7D\")\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":[],"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/visit';\nconst options = {method: 'PATCH'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D/visit\")\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":[],"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/permalink/%7Bidentifier%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/template/permalink/%7Bidentifier%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/publish":{"post":{"description":"Change whether a project is published for sharing.\n\nRequired token scopes: `base|update`","summary":"publish or unpublish a project","tags":["base"],"x-mint":{"metadata":{"title":"Publish or unpublish project","sidebarTitle":"Publish or unpublish project","description":"Change whether a project is published for sharing."}},"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 project successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\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: 'POST',\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: 'POST',\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(\"POST\", \"/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 project into the target space.\n\nRequired token scopes: `base|create`","summary":"import a project","tags":["base"],"x-mint":{"metadata":{"title":"Import project","sidebarTitle":"Import project","description":"Import a project into the target space."}},"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 project and receive progress updates through server-sent events.\n\nRequired token scopes: `base|create`","summary":"import a project with SSE progress events","tags":["base"],"x-mint":{"metadata":{"title":"Import project with progress","sidebarTitle":"Import project with progress","description":"Import a project and receive progress updates through server-sent events."}},"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/import-airtable/analyze":{"post":{"description":"List accessible Airtable bases or summarize one base schema before import","summary":"analyze an Airtable import source","tags":["base"],"x-mint":{"metadata":{"title":"Analyze Airtable import source","sidebarTitle":"Analyze Airtable import source","description":"List accessible Airtable bases or summarize one base schema before import"}},"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"integrationId":{"type":"string","description":"Id of a connected Airtable user integration; its access token is resolved (and refreshed) server-side and never leaves the server."},"accessToken":{"type":"string","minLength":1,"description":"Airtable personal access token for direct API usage (never persisted by the server). Ignored when integrationId is provided."},"airtableBaseId":{"type":"string","description":"When omitted the accessible Airtable bases are listed; when provided the base schema summary is returned."}}}}}},"responses":{"200":{"description":"Returns accessible bases or the schema summary of the requested base.","content":{"application/json":{"schema":{"type":"object","properties":{"bases":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"permissionLevel":{"type":"string"}},"required":["id","name","permissionLevel"]}},"base":{"type":"object","properties":{"id":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"fieldCount":{"type":"number"},"viewCount":{"type":"number"},"description":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"description":{"type":"string"}},"required":["name","type"]}}},"required":["id","name","fieldCount","viewCount","fields"]}},"issues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["fieldDegraded","fieldSkipped","viewSkipped","valuesDropped","viewConfigDegraded"]},"tableName":{"type":"string"},"fieldName":{"type":"string"},"viewName":{"type":"string"},"fromType":{"type":"string"},"toType":{"type":"string"},"count":{"type":"number"},"reason":{"type":"string"}},"required":["code","tableName"]}}},"required":["id","tables","issues"]}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/import-airtable/analyze \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"integrationId\":\"string\",\"accessToken\":\"string\",\"airtableBaseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-airtable/analyze';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"integrationId\":\"string\",\"accessToken\":\"string\",\"airtableBaseId\":\"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-airtable/analyze',\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({integrationId: 'string', accessToken: 'string', airtableBaseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"integrationId\\\":\\\"string\\\",\\\"accessToken\\\":\\\"string\\\",\\\"airtableBaseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import-airtable/analyze\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import-airtable/stream":{"post":{"description":"import an Airtable base with SSE progress stream","summary":"import an Airtable base with SSE progress events","tags":["base"],"x-mint":{"metadata":{"title":"Import Airtable base with progress","sidebarTitle":"Import Airtable base with progress","description":"import an Airtable base with SSE progress stream"}},"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"Target space for the new project. Required only when baseId is omitted; when importing into an existing project the project's own space is used and spaceId is ignored."},"baseId":{"type":"string","description":"Import into this existing project (add its tables) instead of creating a new one. When omitted, a new project named baseName is created in spaceId."},"folderId":{"type":"string","description":"Target folder (node id or folder id); requires baseId, tables land at root when omitted."},"integrationId":{"type":"string","description":"Id of a connected Airtable user integration; its access token is resolved (and refreshed) server-side and never leaves the server."},"accessToken":{"type":"string","minLength":1,"description":"Airtable personal access token for direct API usage (never persisted by the server). Ignored when integrationId is provided."},"airtableBaseId":{"type":"string","minLength":1},"baseName":{"type":"string","minLength":1,"description":"Name for the created project (normally the Airtable base name). Required unless baseId is set."},"importRecords":{"type":"boolean","description":"Import record data (default true). When false only the structure is created."},"importAttachments":{"type":"boolean","description":"Download attachments from Airtable and re-upload them (default true)."},"importViewConfig":{"type":"boolean","description":"Import view filters, sorts, grouping and kanban stacking. Requires shareLink, because the official Airtable API does not expose view configuration."},"shareLink":{"type":"string","description":"Public Airtable shared-base link (https://airtable.com/appXXX/shrYYY). Used read-only to read view configuration; must point at airtableBaseId. The token never sees it."}},"required":["airtableBaseId"]}}}},"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-airtable/stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"baseId\":\"string\",\"folderId\":\"string\",\"integrationId\":\"string\",\"accessToken\":\"string\",\"airtableBaseId\":\"string\",\"baseName\":\"string\",\"importRecords\":true,\"importAttachments\":true,\"importViewConfig\":true,\"shareLink\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-airtable/stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"baseId\":\"string\",\"folderId\":\"string\",\"integrationId\":\"string\",\"accessToken\":\"string\",\"airtableBaseId\":\"string\",\"baseName\":\"string\",\"importRecords\":true,\"importAttachments\":true,\"importViewConfig\":true,\"shareLink\":\"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-airtable/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 spaceId: 'string',\n baseId: 'string',\n folderId: 'string',\n integrationId: 'string',\n accessToken: 'string',\n airtableBaseId: 'string',\n baseName: 'string',\n importRecords: true,\n importAttachments: true,\n importViewConfig: true,\n shareLink: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"baseId\\\":\\\"string\\\",\\\"folderId\\\":\\\"string\\\",\\\"integrationId\\\":\\\"string\\\",\\\"accessToken\\\":\\\"string\\\",\\\"airtableBaseId\\\":\\\"string\\\",\\\"baseName\\\":\\\"string\\\",\\\"importRecords\\\":true,\\\"importAttachments\\\":true,\\\"importViewConfig\\\":true,\\\"shareLink\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import-airtable/stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import-google-sheet/analyze":{"post":{"description":"List the tabs (worksheets) of a picked Google spreadsheet before import","summary":"analyze a Google Sheets import source","tags":["base"],"x-mint":{"metadata":{"title":"Analyze Google Sheets import source","sidebarTitle":"Analyze Google Sheets import source","description":"List the tabs (worksheets) of a picked Google spreadsheet before import"}},"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"integrationId":{"type":"string","description":"Id of a connected Google Sheets user integration; its access token is resolved (and refreshed) server-side and never leaves the server for API calls."},"accessToken":{"type":"string","minLength":1,"description":"Raw Google OAuth access token with the drive.file scope (never persisted by the server). Ignored when integrationId is provided."},"spreadsheetId":{"type":"string","minLength":1,"description":"Google Drive file id of the spreadsheet, as returned by the Google Picker. The OAuth grant only covers files the user picked (drive.file scope)."},"includeSampleRows":{"type":"boolean","description":"Also return each tab's first few rows as cell texts (one extra Sheets API request). Off by default: callers that only list tabs should not pay for it."}},"required":["spreadsheetId"]}}}},"responses":{"200":{"description":"Returns the spreadsheet title and its tabs with grid sizes.","content":{"application/json":{"schema":{"type":"object","properties":{"spreadsheet":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"sheets":{"type":"array","items":{"type":"object","properties":{"sheetId":{"type":"number"},"title":{"type":"string"},"rowCount":{"type":"number"},"columnCount":{"type":"number"},"sampleRows":{"type":"array","items":{"type":"array","items":{"type":"string"}}}},"required":["sheetId","title","rowCount","columnCount"]}}},"required":["id","title","sheets"]}},"required":["spreadsheet"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/import-google-sheet/analyze \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"integrationId\":\"string\",\"accessToken\":\"string\",\"spreadsheetId\":\"string\",\"includeSampleRows\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-google-sheet/analyze';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"integrationId\":\"string\",\"accessToken\":\"string\",\"spreadsheetId\":\"string\",\"includeSampleRows\":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/import-google-sheet/analyze',\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 integrationId: 'string',\n accessToken: 'string',\n spreadsheetId: 'string',\n includeSampleRows: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"integrationId\\\":\\\"string\\\",\\\"accessToken\\\":\\\"string\\\",\\\"spreadsheetId\\\":\\\"string\\\",\\\"includeSampleRows\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import-google-sheet/analyze\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import-google-sheet/stream":{"post":{"description":"import a Google spreadsheet with SSE progress stream","summary":"import a Google spreadsheet with SSE progress events","tags":["base"],"x-mint":{"metadata":{"title":"Import Google spreadsheet with progress","sidebarTitle":"Import Google spreadsheet with progress","description":"import a Google spreadsheet with SSE progress stream"}},"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"Target space for the new project. Required only when baseId is omitted; when importing into an existing project the project's own space is used and spaceId is ignored."},"baseId":{"type":"string","description":"Import into this existing project (add its tables) instead of creating a new one. When omitted, a new project named baseName is created in spaceId."},"integrationId":{"type":"string","description":"Id of a connected Google Sheets user integration; its access token is resolved (and refreshed) server-side and never leaves the server for API calls."},"accessToken":{"type":"string","minLength":1,"description":"Raw Google OAuth access token with the drive.file scope (never persisted by the server). Ignored when integrationId is provided."},"spreadsheetId":{"type":"string","minLength":1},"baseName":{"type":"string","minLength":1,"description":"Name for the created project (normally the spreadsheet title). Required unless baseId is set."},"sheetIds":{"type":"array","items":{"type":"number"},"minItems":1,"description":"Numeric ids of the tabs to import (from analyze). When omitted all tabs are imported; an explicitly empty array is rejected (it would silently mean \"all\")."},"importRecords":{"type":"boolean","description":"Import record data (default true). When false only the structure is created."}},"required":["spreadsheetId"]}}}},"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-google-sheet/stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"baseId\":\"string\",\"integrationId\":\"string\",\"accessToken\":\"string\",\"spreadsheetId\":\"string\",\"baseName\":\"string\",\"sheetIds\":[0],\"importRecords\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-google-sheet/stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"baseId\":\"string\",\"integrationId\":\"string\",\"accessToken\":\"string\",\"spreadsheetId\":\"string\",\"baseName\":\"string\",\"sheetIds\":[0],\"importRecords\":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/import-google-sheet/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 spaceId: 'string',\n baseId: 'string',\n integrationId: 'string',\n accessToken: 'string',\n spreadsheetId: 'string',\n baseName: 'string',\n sheetIds: [0],\n importRecords: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"baseId\\\":\\\"string\\\",\\\"integrationId\\\":\\\"string\\\",\\\"accessToken\\\":\\\"string\\\",\\\"spreadsheetId\\\":\\\"string\\\",\\\"baseName\\\":\\\"string\\\",\\\"sheetIds\\\":[0],\\\"importRecords\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import-google-sheet/stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import-google-sheet/picker-config":{"get":{"description":"Public client config for opening the Google Picker (API key and Cloud project number)\n\nSession (cookie) authentication only. Not callable with an access token.","summary":"get Google Picker client config","tags":["base"],"x-mint":{"metadata":{"title":"Get Google Picker configuration","sidebarTitle":"Get Google Picker configuration","description":"Public client config for opening the Google Picker (API key and Cloud project number)"}},"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Returns the Picker API key and app id.","content":{"application/json":{"schema":{"type":"object","properties":{"apiKey":{"type":"string"},"appId":{"type":"string"}},"required":["apiKey","appId"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/import-google-sheet/picker-config"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-google-sheet/picker-config';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/import-google-sheet/picker-config',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/base/import-google-sheet/picker-config\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/move":{"put":{"description":"Move a project to another space. Same data-DB moves complete synchronously. Cross-data-DB moves return a jobId and run asynchronously.\n\nRequired token scopes: `space|update`","summary":"move a project to another space","tags":["base"],"x-mint":{"metadata":{"title":"Move project","sidebarTitle":"Move project","description":"Move a project to another space. Same data-DB moves complete synchronously. Cross-data-DB moves return a jobId and run asynchronously."}},"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 completed or accepted as async job","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"async":{"type":"boolean"}}}}}}},"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}/move-check":{"get":{"description":"Check the cross-space link/lookup/rollup fields that would be converted if this project were moved into the given target space (both outgoing and incoming references), and whether a physical cross-data-DB move is required.\n\nRequired token scopes: `space|update`","summary":"Check cross-space affected fields for project move","tags":["base"],"x-mint":{"metadata":{"title":"Check project move requirements","sidebarTitle":"Check project move requirements","description":"Check the cross-space link/lookup/rollup fields that would be converted if this project were moved into the given target space (both outgoing and incoming references), and whether a physical cross-data-DB move is required."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"query"}],"responses":{"200":{"description":"The list of cross-space affected fields and data-DB move requirements.","content":{"application/json":{"schema":{"type":"object","properties":{"affectedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"type":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"},"baseId":{"type":"string"},"baseName":{"type":"string"},"reason":{"type":"string","enum":["direct_link","incoming_link"]}},"required":["fieldId","fieldName","type","tableId","tableName","baseId","baseName","reason"]}},"dataDb":{"type":"object","properties":{"sameDataDb":{"type":"boolean"},"requiresPhysicalMove":{"type":"boolean"},"source":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"cacheKey":{"type":"string"},"connectionId":{"type":"string"},"displayHost":{"type":"string","nullable":true},"displayDatabase":{"type":"string","nullable":true},"internalSchema":{"type":"string"}},"required":["mode","cacheKey"]},"target":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"cacheKey":{"type":"string"},"connectionId":{"type":"string"},"displayHost":{"type":"string","nullable":true},"displayDatabase":{"type":"string","nullable":true},"internalSchema":{"type":"string"}},"required":["mode","cacheKey"]},"estimatedBytes":{"type":"number"},"estimatedRows":{"type":"number"}},"required":["sameDataDb","requiresPhysicalMove","source","target"]}},"required":["affectedFields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/move-check?spaceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/move-check?spaceId=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/move-check?spaceId=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/move-check?spaceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/move-job/{jobId}":{"get":{"description":"Get status of a cross-data-DB project move job\n\nRequired token scopes: `space|update`","summary":"Get project data DB move job status","tags":["base"],"x-mint":{"metadata":{"title":"Get project database move job","sidebarTitle":"Get project database move job","description":"Get status of a cross-data-DB project move job"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Move job status","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"sourceSpaceId":{"type":"string"},"targetSpaceId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","copying_base_schema","copying_shared_rows","validating","switching","succeeded","failed","cancelled"]},"phase":{"type":"string"},"progressPercent":{"type":"number"},"copyStats":{"nullable":true},"validationStats":{"nullable":true},"lastError":{"type":"string","nullable":true},"cancelable":{"type":"boolean"},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","baseId","sourceSpaceId","targetSpaceId","state","cancelable","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/move-job/%7BjobId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/move-job/%7BjobId%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/move-job/%7BjobId%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/move-job/%7BjobId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/move-job/{jobId}/cancel":{"post":{"description":"Cancel a cross-data-DB project move job (only before switch)\n\nRequired token scopes: `space|update`","summary":"Cancel project data DB move job","tags":["base"],"x-mint":{"metadata":{"title":"Cancel project database move job","sidebarTitle":"Cancel project database move job","description":"Cancel a cross-data-DB project move job (only before switch)"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Move job cancelled","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"sourceSpaceId":{"type":"string"},"targetSpaceId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","copying_base_schema","copying_shared_rows","validating","switching","succeeded","failed","cancelled"]},"phase":{"type":"string"},"progressPercent":{"type":"number"},"copyStats":{"nullable":true},"validationStats":{"nullable":true},"lastError":{"type":"string","nullable":true},"cancelable":{"type":"boolean"},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","baseId","sourceSpaceId","targetSpaceId","state","cancelable","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/move-job/%7BjobId%7D/cancel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/move-job/%7BjobId%7D/cancel';\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/move-job/%7BjobId%7D/cancel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/move-job/%7BjobId%7D/cancel\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/move-job/{jobId}/retry":{"post":{"description":"Retry a failed cross-data-DB project move job\n\nRequired token scopes: `space|update`","summary":"Retry project data DB move job","tags":["base"],"x-mint":{"metadata":{"title":"Retry project database move job","sidebarTitle":"Retry project database move job","description":"Retry a failed cross-data-DB project move job"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Retried move job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"sourceSpaceId":{"type":"string"},"targetSpaceId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","copying_base_schema","copying_shared_rows","validating","switching","succeeded","failed","cancelled"]},"phase":{"type":"string"},"progressPercent":{"type":"number"},"copyStats":{"nullable":true},"validationStats":{"nullable":true},"lastError":{"type":"string","nullable":true},"cancelable":{"type":"boolean"},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","baseId","sourceSpaceId","targetSpaceId","state","cancelable","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/move-job/%7BjobId%7D/retry \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/move-job/%7BjobId%7D/retry';\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/move-job/%7BjobId%7D/retry',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/move-job/%7BjobId%7D/retry\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/erd":{"get":{"description":"Retrieve the entity relationship diagram for a project.\n\nRequired token scopes: `base|update`","tags":["base"],"x-mint":{"metadata":{"title":"Get project relationship diagram","sidebarTitle":"Get project relationship diagram","description":"Retrieve the entity relationship diagram for a project."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the erd of a project.","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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"isPrimary":{"type":"boolean","nullable":true,"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":"List projects in the specified space using the supplied query.\n\nRequired token scopes: `base|read`","tags":["base"],"x-mint":{"metadata":{"title":"List projects in space","sidebarTitle":"List projects in space","description":"List projects in the specified space using the supplied query."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of project.","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"},"personalOrder":{"type":"number"},"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"},"v2Status":{"type":"object","properties":{"useV2":{"type":"boolean"},"reason":{"type":"string","enum":["env_force_v2_all","config_force_v2_all","new_base","header_override","space_feature","unsupported_feature","disabled","feature_not_enabled","no_feature"]}},"required":["useV2","reason"]},"isShared":{"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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["space"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/permanent"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/permanent';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/permanent\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/v1/ai-proxy/gateway-models":{"get":{"description":"Get AI Gateway models supported by the agent runtime (enterprise/cloud editions only)\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["admin"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Supported gateway models; configured=false when no gateway key is set.","content":{"application/json":{"schema":{"type":"object","properties":{"configured":{"type":"boolean"},"models":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"created":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}}},"required":["id"]}}},"required":["configured","models"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/v1/ai-proxy/gateway-models"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/v1/ai-proxy/gateway-models';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/v1/ai-proxy/gateway-models',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/v1/ai-proxy/gateway-models\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/mail-sender/test-transport-config":{"post":{"description":"Test mail transporter\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["mail"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/mail-sender/test-transport-config \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\"))"}]}},"/mail-sender/{baseId}/send":{"post":{"description":"Send an email\n\nRequired token scopes: `base|update`","tags":["mail"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"anyOf":[{"type":"string","format":"email"},{"type":"array","items":{"type":"string","format":"email"}}]},"subject":{"type":"string"},"body":{"type":"string"},"cc":{"anyOf":[{"type":"string","format":"email"},{"type":"array","items":{"type":"string","format":"email"}}]},"bcc":{"anyOf":[{"type":"string","format":"email"},{"type":"array","items":{"type":"string","format":"email"}}]},"replyTo":{"type":"string","format":"email"},"smtp":{"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"]},"bodyType":{"type":"string","enum":["markdown","html"],"default":"markdown"}},"required":["subject","body"]}}}},"responses":{"200":{"description":"Email sent successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}},"required":["success","message"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/mail-sender/%7BbaseId%7D/send \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"to\":\"user@example.com\",\"subject\":\"string\",\"body\":\"string\",\"cc\":\"user@example.com\",\"bcc\":\"user@example.com\",\"replyTo\":\"user@example.com\",\"smtp\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}},\"bodyType\":\"markdown\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/mail-sender/%7BbaseId%7D/send';\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\",\"subject\":\"string\",\"body\":\"string\",\"cc\":\"user@example.com\",\"bcc\":\"user@example.com\",\"replyTo\":\"user@example.com\",\"smtp\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}},\"bodyType\":\"markdown\"}'\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/%7BbaseId%7D/send',\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 subject: 'string',\n body: 'string',\n cc: 'user@example.com',\n bcc: 'user@example.com',\n replyTo: 'user@example.com',\n smtp: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n },\n bodyType: 'markdown'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"to\\\":\\\"user@example.com\\\",\\\"subject\\\":\\\"string\\\",\\\"body\\\":\\\"string\\\",\\\"cc\\\":\\\"user@example.com\\\",\\\"bcc\\\":\\\"user@example.com\\\",\\\"replyTo\\\":\\\"user@example.com\\\",\\\"smtp\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}},\\\"bodyType\\\":\\\"markdown\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/mail-sender/%7BbaseId%7D/send\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting":{"patch":{"description":"Get the instance settings\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"disallowSignUp":{"type":"boolean"},"bannedEmailDomains":{"type":"array","items":{"type":"string"}},"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"},"displayName":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","nullable":true,"properties":{"xl":{"type":"string"},"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"}}},"hiddenTiers":{"type":"array","items":{"type":"string","enum":["xl","lg","md","sm"]}},"defaultTier":{"type":"string","enum":["xl","lg","md","sm"]}}},"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}},"disableModelSelection":{"type":"boolean"}}},"aiGatewayApiKey":{"type":"string","nullable":true},"aiGatewayBaseUrl":{"type":"string","nullable":true,"format":"uri"},"attachmentTest":{"type":"object","nullable":true,"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","nullable":true,"enum":["url","base64"]},"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},"modelMappings":{"type":"array","items":{"type":"object","properties":{"sourceModelKey":{"type":"string"},"targetModelKey":{"type":"string"},"enabled":{"type":"boolean"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["sourceModelKey","targetModelKey"]}},"realtimeTranscription":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["openai"],"default":"openai"},"apiKey":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true,"format":"uri"},"model":{"type":"string","enum":["gpt-4o-mini-transcribe","gpt-4o-transcribe","whisper-1","gpt-realtime-whisper"],"default":"gpt-4o-mini-transcribe"},"status":{"type":"string","enum":["untested","verified","error"]},"testedAt":{"type":"string"},"maxSessionDurationSec":{"type":"number","minimum":10,"maximum":600},"sessionCreateLimitPerMinute":{"type":"number","minimum":1,"maximum":60}}},"enable":{"type":"boolean"}}},"enableWaitlist":{"type":"boolean"},"appConfig":{"type":"object","properties":{"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"deployProvider":{"type":"string","enum":["vercel","docker-runtime"]},"appAuth":{"type":"object","properties":{"google":{"type":"object","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}}},"emailOtp":{"type":"object","properties":{"smtp":{"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"]}}}}},"badgeEnabled":{"type":"boolean"}}},"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"]},"imConfig":{"type":"object","nullable":true,"properties":{"telegram":{"type":"object","nullable":true,"properties":{"botToken":{"type":"string"},"botUsername":{"type":"string"}},"required":["botToken","botUsername"]},"feishu":{"type":"object","nullable":true,"properties":{"appId":{"type":"string"},"appSecret":{"type":"string"},"botName":{"type":"string"}},"required":["appId","appSecret"]}}}}}}}},"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,\"bannedEmailDomains\":[\"string\"],\"disallowSpaceCreation\":true,\"disallowSpaceInvitation\":true,\"enableEmailVerification\":true,\"enableCreditReward\":true,\"aiConfig\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"xl\":\"string\",\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"hiddenTiers\":[\"xl\"],\"defaultTier\":\"xl\"},\"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\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"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\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\",\"i18nDescription\":{\"en\":\"string\",\"zh\":\"string\"},\"recommended\":true,\"recommendedDescription\":{\"en\":\"string\",\"zh\":\"string\"}}],\"capabilities\":{\"disableActions\":[\"string\"],\"disableModelSelection\":true},\"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,\"modelMappings\":[{\"sourceModelKey\":\"string\",\"targetModelKey\":\"string\",\"enabled\":true,\"createdTime\":\"string\",\"lastModifiedTime\":\"string\"}],\"realtimeTranscription\":{\"enabled\":true,\"provider\":\"openai\",\"apiKey\":\"string\",\"endpoint\":\"http://example.com\",\"model\":\"gpt-4o-mini-transcribe\",\"status\":\"untested\",\"testedAt\":\"string\",\"maxSessionDurationSec\":10,\"sessionCreateLimitPerMinute\":1},\"enable\":true},\"enableWaitlist\":true,\"appConfig\":{\"vercelToken\":\"string\",\"customDomain\":\"string\",\"deployProvider\":\"vercel\",\"appAuth\":{\"google\":{\"clientId\":\"string\",\"clientSecret\":\"string\"},\"emailOtp\":{\"smtp\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}},\"badgeEnabled\":true},\"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\"}},\"imConfig\":{\"telegram\":{\"botToken\":\"string\",\"botUsername\":\"string\"},\"feishu\":{\"appId\":\"string\",\"appSecret\":\"string\",\"botName\":\"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,\"bannedEmailDomains\":[\"string\"],\"disallowSpaceCreation\":true,\"disallowSpaceInvitation\":true,\"enableEmailVerification\":true,\"enableCreditReward\":true,\"aiConfig\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"xl\":\"string\",\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"hiddenTiers\":[\"xl\"],\"defaultTier\":\"xl\"},\"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\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"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\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\",\"i18nDescription\":{\"en\":\"string\",\"zh\":\"string\"},\"recommended\":true,\"recommendedDescription\":{\"en\":\"string\",\"zh\":\"string\"}}],\"capabilities\":{\"disableActions\":[\"string\"],\"disableModelSelection\":true},\"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,\"modelMappings\":[{\"sourceModelKey\":\"string\",\"targetModelKey\":\"string\",\"enabled\":true,\"createdTime\":\"string\",\"lastModifiedTime\":\"string\"}],\"realtimeTranscription\":{\"enabled\":true,\"provider\":\"openai\",\"apiKey\":\"string\",\"endpoint\":\"http://example.com\",\"model\":\"gpt-4o-mini-transcribe\",\"status\":\"untested\",\"testedAt\":\"string\",\"maxSessionDurationSec\":10,\"sessionCreateLimitPerMinute\":1},\"enable\":true},\"enableWaitlist\":true,\"appConfig\":{\"vercelToken\":\"string\",\"customDomain\":\"string\",\"deployProvider\":\"vercel\",\"appAuth\":{\"google\":{\"clientId\":\"string\",\"clientSecret\":\"string\"},\"emailOtp\":{\"smtp\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}},\"badgeEnabled\":true},\"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\"}},\"imConfig\":{\"telegram\":{\"botToken\":\"string\",\"botUsername\":\"string\"},\"feishu\":{\"appId\":\"string\",\"appSecret\":\"string\",\"botName\":\"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 bannedEmailDomains: ['string'],\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 xl: 'string',\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 hiddenTiers: ['xl'],\n defaultTier: 'xl'\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 inputTiers: [{cost: 'string', min: 0, max: 0}],\n outputTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheReadTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheWriteTiers: [{cost: 'string', min: 0, max: 0}]\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: ['string'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string',\n i18nDescription: {en: 'string', zh: 'string'},\n recommended: true,\n recommendedDescription: {en: 'string', zh: 'string'}\n }\n ],\n capabilities: {disableActions: ['string'], disableModelSelection: true},\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 modelMappings: [\n {\n sourceModelKey: 'string',\n targetModelKey: 'string',\n enabled: true,\n createdTime: 'string',\n lastModifiedTime: 'string'\n }\n ],\n realtimeTranscription: {\n enabled: true,\n provider: 'openai',\n apiKey: 'string',\n endpoint: 'http://example.com',\n model: 'gpt-4o-mini-transcribe',\n status: 'untested',\n testedAt: 'string',\n maxSessionDurationSec: 10,\n sessionCreateLimitPerMinute: 1\n },\n enable: true\n },\n enableWaitlist: true,\n appConfig: {\n vercelToken: 'string',\n customDomain: 'string',\n deployProvider: 'vercel',\n appAuth: {\n google: {clientId: 'string', clientSecret: 'string'},\n emailOtp: {\n smtp: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n }\n }\n },\n badgeEnabled: true\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 imConfig: {\n telegram: {botToken: 'string', botUsername: 'string'},\n feishu: {appId: 'string', appSecret: 'string', botName: 'string'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"disallowSignUp\\\":true,\\\"bannedEmailDomains\\\":[\\\"string\\\"],\\\"disallowSpaceCreation\\\":true,\\\"disallowSpaceInvitation\\\":true,\\\"enableEmailVerification\\\":true,\\\"enableCreditReward\\\":true,\\\"aiConfig\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"xl\\\":\\\"string\\\",\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"hiddenTiers\\\":[\\\"xl\\\"],\\\"defaultTier\\\":\\\"xl\\\"},\\\"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\\\",\\\"inputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"outputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheReadTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheWriteTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}]},\\\"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\\\":[\\\"string\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\",\\\"i18nDescription\\\":{\\\"en\\\":\\\"string\\\",\\\"zh\\\":\\\"string\\\"},\\\"recommended\\\":true,\\\"recommendedDescription\\\":{\\\"en\\\":\\\"string\\\",\\\"zh\\\":\\\"string\\\"}}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"],\\\"disableModelSelection\\\":true},\\\"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,\\\"modelMappings\\\":[{\\\"sourceModelKey\\\":\\\"string\\\",\\\"targetModelKey\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"createdTime\\\":\\\"string\\\",\\\"lastModifiedTime\\\":\\\"string\\\"}],\\\"realtimeTranscription\\\":{\\\"enabled\\\":true,\\\"provider\\\":\\\"openai\\\",\\\"apiKey\\\":\\\"string\\\",\\\"endpoint\\\":\\\"http://example.com\\\",\\\"model\\\":\\\"gpt-4o-mini-transcribe\\\",\\\"status\\\":\\\"untested\\\",\\\"testedAt\\\":\\\"string\\\",\\\"maxSessionDurationSec\\\":10,\\\"sessionCreateLimitPerMinute\\\":1},\\\"enable\\\":true},\\\"enableWaitlist\\\":true,\\\"appConfig\\\":{\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"deployProvider\\\":\\\"vercel\\\",\\\"appAuth\\\":{\\\"google\\\":{\\\"clientId\\\":\\\"string\\\",\\\"clientSecret\\\":\\\"string\\\"},\\\"emailOtp\\\":{\\\"smtp\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}},\\\"badgeEnabled\\\":true},\\\"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\\\"}},\\\"imConfig\\\":{\\\"telegram\\\":{\\\"botToken\\\":\\\"string\\\",\\\"botUsername\\\":\\\"string\\\"},\\\"feishu\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\",\\\"botName\\\":\\\"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\n\nRequired token scopes: `instance|read`","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},"bannedEmailDomains":{"type":"array","nullable":true,"items":{"type":"string"}},"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"},"displayName":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","nullable":true,"properties":{"xl":{"type":"string"},"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"}}},"hiddenTiers":{"type":"array","items":{"type":"string","enum":["xl","lg","md","sm"]}},"defaultTier":{"type":"string","enum":["xl","lg","md","sm"]}}},"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}},"disableModelSelection":{"type":"boolean"}}},"aiGatewayApiKey":{"type":"string","nullable":true},"aiGatewayBaseUrl":{"type":"string","nullable":true,"format":"uri"},"attachmentTest":{"type":"object","nullable":true,"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","nullable":true,"enum":["url","base64"]},"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},"modelMappings":{"type":"array","items":{"type":"object","properties":{"sourceModelKey":{"type":"string"},"targetModelKey":{"type":"string"},"enabled":{"type":"boolean"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["sourceModelKey","targetModelKey"]}},"realtimeTranscription":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["openai"],"default":"openai"},"apiKey":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true,"format":"uri"},"model":{"type":"string","enum":["gpt-4o-mini-transcribe","gpt-4o-transcribe","whisper-1","gpt-realtime-whisper"],"default":"gpt-4o-mini-transcribe"},"status":{"type":"string","enum":["untested","verified","error"]},"testedAt":{"type":"string"},"maxSessionDurationSec":{"type":"number","minimum":10,"maximum":600},"sessionCreateLimitPerMinute":{"type":"number","minimum":1,"maximum":60}}},"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":{"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"deployProvider":{"type":"string","enum":["vercel","docker-runtime"]},"appAuth":{"type":"object","properties":{"google":{"type":"object","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}}},"emailOtp":{"type":"object","properties":{"smtp":{"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"]}}}}},"badgeEnabled":{"type":"boolean"}}},"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},"imConfig":{"type":"object","nullable":true,"properties":{"telegram":{"type":"object","nullable":true,"properties":{"botToken":{"type":"string"},"botUsername":{"type":"string"}},"required":["botToken","botUsername"]},"feishu":{"type":"object","nullable":true,"properties":{"appId":{"type":"string"},"appSecret":{"type":"string"},"botName":{"type":"string"}},"required":["appId","appSecret"]}}},"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":[],"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"},"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]}},"chatModel":{"type":"object","properties":{"xl":{"type":"string"},"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"}}},"hiddenTiers":{"type":"array","items":{"type":"string","enum":["xl","lg","md","sm"]}},"defaultTier":{"type":"string","enum":["xl","lg","md","sm"]}}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}},"disableModelSelection":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}},"voiceInput":{"type":"object","properties":{"enabled":{"type":"boolean"},"model":{"type":"string","enum":["gpt-4o-mini-transcribe","gpt-4o-transcribe","whisper-1","gpt-realtime-whisper"]},"maxSessionDurationSec":{"type":"number"}},"required":["enabled","model","maxSessionDurationSec"]}},"required":["enable","llmProviders"]},"appGenerationEnabled":{"type":"boolean"},"turnstileSiteKey":{"type":"string","nullable":true},"changeEmailSendCodeMailRate":{"type":"number"},"resetPasswordSendMailRate":{"type":"number"},"signupVerificationSendCodeMailRate":{"type":"number"},"emailCodeSigninEnabled":{"type":"boolean"},"enableCreditReward":{"type":"boolean"},"availableIntegrationProviders":{"type":"array","items":{"type":"string"}},"githubAppConfigured":{"type":"boolean"},"mobileAuthExchange":{"type":"boolean"},"socialAuthProviders":{"type":"array","items":{"type":"string"}},"passwordLoginDisabled":{"type":"boolean"},"scrapeEnabled":{"type":"boolean"},"buildVersion":{"type":"string"}},"required":["instanceId","aiConfig"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/public"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/public';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/admin/setting/public\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/ai-config":{"patch":{"description":"Update one AI configuration section\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"section":{"type":"string","enum":["llmApi"]},"patch":{"type":"object","properties":{"llmProviders":{"type":"array","nullable":true,"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"},"displayName":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]}},"aiGatewayApiKey":{"type":"string","nullable":true},"aiGatewayBaseUrl":{"type":"string","nullable":true,"format":"uri"},"attachmentTest":{"type":"object","nullable":true,"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","nullable":true,"enum":["url","base64"]}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["modelPool"]},"patch":{"type":"object","properties":{"gatewayModels":{"type":"array","nullable":true,"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["defaultModels"]},"patch":{"type":"object","properties":{"chatModel":{"type":"object","nullable":true,"properties":{"xl":{"type":"string"},"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"}}},"hiddenTiers":{"type":"array","items":{"type":"string","enum":["xl","lg","md","sm"]}},"defaultTier":{"type":"string","enum":["xl","lg","md","sm"]}}},"embeddingModel":{"type":"string","nullable":true},"translationModel":{"type":"string","nullable":true}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["capabilities"]},"patch":{"type":"object","properties":{"capabilities":{"type":"object","nullable":true,"properties":{"disableActions":{"type":"array","items":{"type":"string"}},"disableModelSelection":{"type":"boolean"}}}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["concurrency"]},"patch":{"type":"object","properties":{"concurrencyGroups":{"type":"array","nullable":true,"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"]}},"aiGatewayApiKeys":{"type":"array","nullable":true,"items":{"type":"string"}},"concurrencyPerKey":{"type":"number","nullable":true,"minimum":1,"maximum":100}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["vertexCredential"]},"patch":{"type":"object","properties":{"vertexByokCredential":{"type":"object","nullable":true,"properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["modelMappings"]},"patch":{"type":"object","properties":{"modelMappings":{"type":"array","nullable":true,"items":{"type":"object","properties":{"sourceModelKey":{"type":"string"},"targetModelKey":{"type":"string"},"enabled":{"type":"boolean"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["sourceModelKey","targetModelKey"]}}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["modelConfigs"]},"patch":{"type":"object","properties":{"llmProviders":{"type":"array","nullable":true,"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"},"displayName":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]}},"gatewayModels":{"type":"array","nullable":true,"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["realtimeTranscription"]},"patch":{"type":"object","properties":{"realtimeTranscription":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["openai"],"default":"openai"},"apiKey":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true,"format":"uri"},"model":{"type":"string","enum":["gpt-4o-mini-transcribe","gpt-4o-transcribe","whisper-1","gpt-realtime-whisper"],"default":"gpt-4o-mini-transcribe"},"status":{"type":"string","enum":["untested","verified","error"]},"testedAt":{"type":"string"},"maxSessionDurationSec":{"type":"number","minimum":10,"maximum":600},"sessionCreateLimitPerMinute":{"type":"number","minimum":1,"maximum":60}}}}}},"required":["section","patch"]}]}}}},"responses":{"200":{"description":"Update AI configuration section successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"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"},"displayName":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","nullable":true,"properties":{"xl":{"type":"string"},"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"}}},"hiddenTiers":{"type":"array","items":{"type":"string","enum":["xl","lg","md","sm"]}},"defaultTier":{"type":"string","enum":["xl","lg","md","sm"]}}},"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}},"disableModelSelection":{"type":"boolean"}}},"aiGatewayApiKey":{"type":"string","nullable":true},"aiGatewayBaseUrl":{"type":"string","nullable":true,"format":"uri"},"attachmentTest":{"type":"object","nullable":true,"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","nullable":true,"enum":["url","base64"]},"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},"modelMappings":{"type":"array","items":{"type":"object","properties":{"sourceModelKey":{"type":"string"},"targetModelKey":{"type":"string"},"enabled":{"type":"boolean"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["sourceModelKey","targetModelKey"]}},"realtimeTranscription":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["openai"],"default":"openai"},"apiKey":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true,"format":"uri"},"model":{"type":"string","enum":["gpt-4o-mini-transcribe","gpt-4o-transcribe","whisper-1","gpt-realtime-whisper"],"default":"gpt-4o-mini-transcribe"},"status":{"type":"string","enum":["untested","verified","error"]},"testedAt":{"type":"string"},"maxSessionDurationSec":{"type":"number","minimum":10,"maximum":600},"sessionCreateLimitPerMinute":{"type":"number","minimum":1,"maximum":60}}},"enable":{"type":"boolean"}}}},"required":["aiConfig"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/setting/ai-config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"section\":\"llmApi\",\"patch\":{\"llmProviders\":[{\"type\":\"openai\",\"name\":\"string\",\"displayName\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"isInstance\":true,\"modelConfigs\":{\"property1\":{\"label\":\"string\",\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"referenceModel\":\"string\",\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0,\"isImageModel\":true,\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"imageAbility\":{\"generation\":true,\"imageToImage\":true},\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"},\"property2\":{\"label\":\"string\",\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"referenceModel\":\"string\",\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0,\"isImageModel\":true,\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"imageAbility\":{\"generation\":true,\"imageToImage\":true},\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"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\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/ai-config';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"section\":\"llmApi\",\"patch\":{\"llmProviders\":[{\"type\":\"openai\",\"name\":\"string\",\"displayName\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"isInstance\":true,\"modelConfigs\":{\"property1\":{\"label\":\"string\",\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"referenceModel\":\"string\",\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0,\"isImageModel\":true,\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"imageAbility\":{\"generation\":true,\"imageToImage\":true},\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"},\"property2\":{\"label\":\"string\",\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"referenceModel\":\"string\",\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0,\"isImageModel\":true,\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"imageAbility\":{\"generation\":true,\"imageToImage\":true},\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"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\"}}'\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/ai-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 section: 'llmApi',\n patch: {\n llmProviders: [\n {\n type: 'openai',\n name: 'string',\n displayName: 'string',\n apiKey: 'string',\n baseUrl: 'http://example.com',\n models: '',\n isInstance: true,\n modelConfigs: {\n property1: {\n label: 'string',\n pricing: {\n input: 'string',\n output: 'string',\n inputCacheRead: 'string',\n inputCacheWrite: 'string',\n reasoning: 'string',\n image: 'string',\n webSearch: 'string',\n inputTiers: [{cost: 'string', min: 0, max: 0}],\n outputTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheReadTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheWriteTiers: [{cost: 'string', min: 0, max: 0}]\n },\n referenceModel: 'string',\n inputRate: 0,\n outputRate: 0,\n cacheReadRate: 0,\n cacheWriteRate: 0,\n reasoningRate: 0,\n imageRate: 0,\n webSearchRate: 0,\n isImageModel: true,\n ability: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n },\n imageAbility: {generation: true, imageToImage: true},\n testedAt: 0,\n ownedBy: 'alibaba',\n modelType: 'language',\n tags: ['string'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string'\n },\n property2: {\n label: 'string',\n pricing: {\n input: 'string',\n output: 'string',\n inputCacheRead: 'string',\n inputCacheWrite: 'string',\n reasoning: 'string',\n image: 'string',\n webSearch: 'string',\n inputTiers: [{cost: 'string', min: 0, max: 0}],\n outputTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheReadTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheWriteTiers: [{cost: 'string', min: 0, max: 0}]\n },\n referenceModel: 'string',\n inputRate: 0,\n outputRate: 0,\n cacheReadRate: 0,\n cacheWriteRate: 0,\n reasoningRate: 0,\n imageRate: 0,\n webSearchRate: 0,\n isImageModel: true,\n ability: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n },\n imageAbility: {generation: true, imageToImage: true},\n testedAt: 0,\n ownedBy: 'alibaba',\n modelType: 'language',\n tags: ['string'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string'\n }\n }\n }\n ],\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 }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"section\\\":\\\"llmApi\\\",\\\"patch\\\":{\\\"llmProviders\\\":[{\\\"type\\\":\\\"openai\\\",\\\"name\\\":\\\"string\\\",\\\"displayName\\\":\\\"string\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"http://example.com\\\",\\\"models\\\":\\\"\\\",\\\"isInstance\\\":true,\\\"modelConfigs\\\":{\\\"property1\\\":{\\\"label\\\":\\\"string\\\",\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\",\\\"inputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"outputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheReadTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheWriteTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}]},\\\"referenceModel\\\":\\\"string\\\",\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0,\\\"isImageModel\\\":true,\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"imageAbility\\\":{\\\"generation\\\":true,\\\"imageToImage\\\":true},\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"string\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"},\\\"property2\\\":{\\\"label\\\":\\\"string\\\",\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\",\\\"inputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"outputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheReadTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheWriteTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}]},\\\"referenceModel\\\":\\\"string\\\",\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0,\\\"isImageModel\\\":true,\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"imageAbility\\\":{\\\"generation\\\":true,\\\"imageToImage\\\":true},\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"string\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"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\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/setting/ai-config\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/app-config":{"patch":{"description":"Update one App Builder configuration section\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"section":{"type":"string","enum":["engine"]},"patch":{"type":"object","properties":{"vercelToken":{"type":"string","nullable":true},"deployProvider":{"type":"string","nullable":true,"enum":["vercel","docker-runtime"]}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["customDomain"]},"patch":{"type":"object","properties":{"customDomain":{"type":"string","nullable":true}}}},"required":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["appAuth"]},"patch":{"type":"object","properties":{"appAuth":{"type":"object","nullable":true,"properties":{"google":{"type":"object","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}}},"emailOtp":{"type":"object","properties":{"smtp":{"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":["section","patch"]},{"type":"object","properties":{"section":{"type":"string","enum":["branding"]},"patch":{"type":"object","properties":{"badgeEnabled":{"type":"boolean"}},"required":["badgeEnabled"]}},"required":["section","patch"]}]}}}},"responses":{"200":{"description":"Update App Builder configuration section successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"appConfig":{"type":"object","properties":{"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"deployProvider":{"type":"string","enum":["vercel","docker-runtime"]},"appAuth":{"type":"object","properties":{"google":{"type":"object","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}}},"emailOtp":{"type":"object","properties":{"smtp":{"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"]}}}}},"badgeEnabled":{"type":"boolean"}}}},"required":["appConfig"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/setting/app-config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"section\":\"engine\",\"patch\":{\"vercelToken\":\"string\",\"deployProvider\":\"vercel\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/app-config';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"section\":\"engine\",\"patch\":{\"vercelToken\":\"string\",\"deployProvider\":\"vercel\"}}'\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/app-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({section: 'engine', patch: {vercelToken: 'string', deployProvider: 'vercel'}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"section\\\":\\\"engine\\\",\\\"patch\\\":{\\\"vercelToken\\\":\\\"string\\\",\\\"deployProvider\\\":\\\"vercel\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/setting/app-config\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/logo":{"patch":{"description":"Upload logo\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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, optionally test attachment transfer modes\n\nRequired token scopes: `instance|update`","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["aiGateway","vercel","realtimeTranscription"]},"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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|read`","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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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":[],"responses":{"200":{"description":"Returns enterprise license expiration status.","content":{"application/json":{"schema":{"type":"object","properties":{"expiredTime":{"type":"string","nullable":true},"autoFetchEnabled":{"type":"boolean"},"autoFetchFailed":{"type":"boolean"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/enterprise-license/status"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/status';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/admin/enterprise-license/status\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license/auto-fetch/retry":{"post":{"description":"Retry enterprise license auto-renewal immediately\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enterprise license auto-renewal retried successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/enterprise-license/auto-fetch/retry \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/auto-fetch/retry';\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/auto-fetch/retry',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/auto-fetch/retry\", 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\n\nRequired token scopes: `space|update`","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"},"displayName":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","nullable":true,"properties":{"xl":{"type":"string"},"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"}}},"hiddenTiers":{"type":"array","items":{"type":"string","enum":["xl","lg","md","sm"]}},"defaultTier":{"type":"string","enum":["xl","lg","md","sm"]}}},"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}},"disableModelSelection":{"type":"boolean"}}},"aiGatewayApiKey":{"type":"string","nullable":true},"aiGatewayBaseUrl":{"type":"string","nullable":true,"format":"uri"},"attachmentTest":{"type":"object","nullable":true,"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","nullable":true,"enum":["url","base64"]},"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},"modelMappings":{"type":"array","items":{"type":"object","properties":{"sourceModelKey":{"type":"string"},"targetModelKey":{"type":"string"},"enabled":{"type":"boolean"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["sourceModelKey","targetModelKey"]}},"realtimeTranscription":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["openai"],"default":"openai"},"apiKey":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true,"format":"uri"},"model":{"type":"string","enum":["gpt-4o-mini-transcribe","gpt-4o-transcribe","whisper-1","gpt-realtime-whisper"],"default":"gpt-4o-mini-transcribe"},"status":{"type":"string","enum":["untested","verified","error"]},"testedAt":{"type":"string"},"maxSessionDurationSec":{"type":"number","minimum":10,"maximum":600},"sessionCreateLimitPerMinute":{"type":"number","minimum":1,"maximum":60}}},"appConfig":{"type":"object","properties":{"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"deployProvider":{"type":"string","enum":["vercel","docker-runtime"]},"appAuth":{"type":"object","properties":{"google":{"type":"object","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}}},"emailOtp":{"type":"object","properties":{"smtp":{"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"]}}}}},"badgeEnabled":{"type":"boolean"}}}}},"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\n\nRequired token scopes: `space|update`","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"},"displayName":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","nullable":true,"properties":{"xl":{"type":"string"},"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"}}},"hiddenTiers":{"type":"array","items":{"type":"string","enum":["xl","lg","md","sm"]}},"defaultTier":{"type":"string","enum":["xl","lg","md","sm"]}}},"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}},"disableModelSelection":{"type":"boolean"}}},"aiGatewayApiKey":{"type":"string","nullable":true},"aiGatewayBaseUrl":{"type":"string","nullable":true,"format":"uri"},"attachmentTest":{"type":"object","nullable":true,"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","nullable":true,"enum":["url","base64"]},"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},"modelMappings":{"type":"array","items":{"type":"object","properties":{"sourceModelKey":{"type":"string"},"targetModelKey":{"type":"string"},"enabled":{"type":"boolean"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["sourceModelKey","targetModelKey"]}},"realtimeTranscription":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["openai"],"default":"openai"},"apiKey":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true,"format":"uri"},"model":{"type":"string","enum":["gpt-4o-mini-transcribe","gpt-4o-transcribe","whisper-1","gpt-realtime-whisper"],"default":"gpt-4o-mini-transcribe"},"status":{"type":"string","enum":["untested","verified","error"]},"testedAt":{"type":"string"},"maxSessionDurationSec":{"type":"number","minimum":10,"maximum":600},"sessionCreateLimitPerMinute":{"type":"number","minimum":1,"maximum":60}}},"appConfig":{"type":"object","properties":{"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"deployProvider":{"type":"string","enum":["vercel","docker-runtime"]},"appAuth":{"type":"object","properties":{"google":{"type":"object","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}}},"emailOtp":{"type":"object","properties":{"smtp":{"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"]}}}}},"badgeEnabled":{"type":"boolean"}}}}}},"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\":{\"xl\":\"string\",\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"hiddenTiers\":[\"xl\"],\"defaultTier\":\"xl\"},\"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\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"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\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\",\"i18nDescription\":{\"en\":\"string\",\"zh\":\"string\"},\"recommended\":true,\"recommendedDescription\":{\"en\":\"string\",\"zh\":\"string\"}}],\"capabilities\":{\"disableActions\":[\"string\"],\"disableModelSelection\":true},\"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,\"modelMappings\":[{\"sourceModelKey\":\"string\",\"targetModelKey\":\"string\",\"enabled\":true,\"createdTime\":\"string\",\"lastModifiedTime\":\"string\"}],\"realtimeTranscription\":{\"enabled\":true,\"provider\":\"openai\",\"apiKey\":\"string\",\"endpoint\":\"http://example.com\",\"model\":\"gpt-4o-mini-transcribe\",\"status\":\"untested\",\"testedAt\":\"string\",\"maxSessionDurationSec\":10,\"sessionCreateLimitPerMinute\":1},\"appConfig\":{\"vercelToken\":\"string\",\"customDomain\":\"string\",\"deployProvider\":\"vercel\",\"appAuth\":{\"google\":{\"clientId\":\"string\",\"clientSecret\":\"string\"},\"emailOtp\":{\"smtp\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}},\"badgeEnabled\":true}}}'"},{"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\":{\"xl\":\"string\",\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"hiddenTiers\":[\"xl\"],\"defaultTier\":\"xl\"},\"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\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"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\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\",\"i18nDescription\":{\"en\":\"string\",\"zh\":\"string\"},\"recommended\":true,\"recommendedDescription\":{\"en\":\"string\",\"zh\":\"string\"}}],\"capabilities\":{\"disableActions\":[\"string\"],\"disableModelSelection\":true},\"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,\"modelMappings\":[{\"sourceModelKey\":\"string\",\"targetModelKey\":\"string\",\"enabled\":true,\"createdTime\":\"string\",\"lastModifiedTime\":\"string\"}],\"realtimeTranscription\":{\"enabled\":true,\"provider\":\"openai\",\"apiKey\":\"string\",\"endpoint\":\"http://example.com\",\"model\":\"gpt-4o-mini-transcribe\",\"status\":\"untested\",\"testedAt\":\"string\",\"maxSessionDurationSec\":10,\"sessionCreateLimitPerMinute\":1},\"appConfig\":{\"vercelToken\":\"string\",\"customDomain\":\"string\",\"deployProvider\":\"vercel\",\"appAuth\":{\"google\":{\"clientId\":\"string\",\"clientSecret\":\"string\"},\"emailOtp\":{\"smtp\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}},\"badgeEnabled\":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/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 xl: 'string',\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 hiddenTiers: ['xl'],\n defaultTier: 'xl'\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 inputTiers: [{cost: 'string', min: 0, max: 0}],\n outputTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheReadTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheWriteTiers: [{cost: 'string', min: 0, max: 0}]\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: ['string'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string',\n i18nDescription: {en: 'string', zh: 'string'},\n recommended: true,\n recommendedDescription: {en: 'string', zh: 'string'}\n }\n ],\n capabilities: {disableActions: ['string'], disableModelSelection: true},\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 modelMappings: [\n {\n sourceModelKey: 'string',\n targetModelKey: 'string',\n enabled: true,\n createdTime: 'string',\n lastModifiedTime: 'string'\n }\n ],\n realtimeTranscription: {\n enabled: true,\n provider: 'openai',\n apiKey: 'string',\n endpoint: 'http://example.com',\n model: 'gpt-4o-mini-transcribe',\n status: 'untested',\n testedAt: 'string',\n maxSessionDurationSec: 10,\n sessionCreateLimitPerMinute: 1\n },\n appConfig: {\n vercelToken: 'string',\n customDomain: 'string',\n deployProvider: 'vercel',\n appAuth: {\n google: {clientId: 'string', clientSecret: 'string'},\n emailOtp: {\n smtp: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n }\n }\n },\n badgeEnabled: true\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\\\":{\\\"xl\\\":\\\"string\\\",\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"hiddenTiers\\\":[\\\"xl\\\"],\\\"defaultTier\\\":\\\"xl\\\"},\\\"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\\\",\\\"inputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"outputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheReadTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheWriteTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}]},\\\"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\\\":[\\\"string\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\",\\\"i18nDescription\\\":{\\\"en\\\":\\\"string\\\",\\\"zh\\\":\\\"string\\\"},\\\"recommended\\\":true,\\\"recommendedDescription\\\":{\\\"en\\\":\\\"string\\\",\\\"zh\\\":\\\"string\\\"}}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"],\\\"disableModelSelection\\\":true},\\\"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,\\\"modelMappings\\\":[{\\\"sourceModelKey\\\":\\\"string\\\",\\\"targetModelKey\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"createdTime\\\":\\\"string\\\",\\\"lastModifiedTime\\\":\\\"string\\\"}],\\\"realtimeTranscription\\\":{\\\"enabled\\\":true,\\\"provider\\\":\\\"openai\\\",\\\"apiKey\\\":\\\"string\\\",\\\"endpoint\\\":\\\"http://example.com\\\",\\\"model\\\":\\\"gpt-4o-mini-transcribe\\\",\\\"status\\\":\\\"untested\\\",\\\"testedAt\\\":\\\"string\\\",\\\"maxSessionDurationSec\\\":10,\\\"sessionCreateLimitPerMinute\\\":1},\\\"appConfig\\\":{\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"deployProvider\\\":\\\"vercel\\\",\\\"appAuth\\\":{\\\"google\\\":{\\\"clientId\\\":\\\"string\\\",\\\"clientSecret\\\":\\\"string\\\"},\\\"emailOtp\\\":{\\\"smtp\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}},\\\"badgeEnabled\\\":true}}}\"\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\n\nRequired token scopes: `space|update`","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"},"displayName":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","nullable":true,"properties":{"xl":{"type":"string"},"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"}}},"hiddenTiers":{"type":"array","items":{"type":"string","enum":["xl","lg","md","sm"]}},"defaultTier":{"type":"string","enum":["xl","lg","md","sm"]}}},"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}},"disableModelSelection":{"type":"boolean"}}},"aiGatewayApiKey":{"type":"string","nullable":true},"aiGatewayBaseUrl":{"type":"string","nullable":true,"format":"uri"},"attachmentTest":{"type":"object","nullable":true,"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","nullable":true,"enum":["url","base64"]},"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},"modelMappings":{"type":"array","items":{"type":"object","properties":{"sourceModelKey":{"type":"string"},"targetModelKey":{"type":"string"},"enabled":{"type":"boolean"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["sourceModelKey","targetModelKey"]}},"realtimeTranscription":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"provider":{"type":"string","enum":["openai"],"default":"openai"},"apiKey":{"type":"string","nullable":true},"endpoint":{"type":"string","nullable":true,"format":"uri"},"model":{"type":"string","enum":["gpt-4o-mini-transcribe","gpt-4o-transcribe","whisper-1","gpt-realtime-whisper"],"default":"gpt-4o-mini-transcribe"},"status":{"type":"string","enum":["untested","verified","error"]},"testedAt":{"type":"string"},"maxSessionDurationSec":{"type":"number","minimum":10,"maximum":600},"sessionCreateLimitPerMinute":{"type":"number","minimum":1,"maximum":60}}},"appConfig":{"type":"object","properties":{"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"deployProvider":{"type":"string","enum":["vercel","docker-runtime"]},"appAuth":{"type":"object","properties":{"google":{"type":"object","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}}},"emailOtp":{"type":"object","properties":{"smtp":{"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"]}}}}},"badgeEnabled":{"type":"boolean"}}}}}}}}}},"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\":{\"xl\":\"string\",\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"hiddenTiers\":[\"xl\"],\"defaultTier\":\"xl\"},\"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\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"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\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\",\"i18nDescription\":{\"en\":\"string\",\"zh\":\"string\"},\"recommended\":true,\"recommendedDescription\":{\"en\":\"string\",\"zh\":\"string\"}}],\"capabilities\":{\"disableActions\":[\"string\"],\"disableModelSelection\":true},\"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,\"modelMappings\":[{\"sourceModelKey\":\"string\",\"targetModelKey\":\"string\",\"enabled\":true,\"createdTime\":\"string\",\"lastModifiedTime\":\"string\"}],\"realtimeTranscription\":{\"enabled\":true,\"provider\":\"openai\",\"apiKey\":\"string\",\"endpoint\":\"http://example.com\",\"model\":\"gpt-4o-mini-transcribe\",\"status\":\"untested\",\"testedAt\":\"string\",\"maxSessionDurationSec\":10,\"sessionCreateLimitPerMinute\":1},\"appConfig\":{\"vercelToken\":\"string\",\"customDomain\":\"string\",\"deployProvider\":\"vercel\",\"appAuth\":{\"google\":{\"clientId\":\"string\",\"clientSecret\":\"string\"},\"emailOtp\":{\"smtp\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}},\"badgeEnabled\":true}}}'"},{"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\":{\"xl\":\"string\",\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"hiddenTiers\":[\"xl\"],\"defaultTier\":\"xl\"},\"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\",\"inputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"outputTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheReadTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}],\"inputCacheWriteTiers\":[{\"cost\":\"string\",\"min\":0,\"max\":0}]},\"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\":[\"string\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\",\"i18nDescription\":{\"en\":\"string\",\"zh\":\"string\"},\"recommended\":true,\"recommendedDescription\":{\"en\":\"string\",\"zh\":\"string\"}}],\"capabilities\":{\"disableActions\":[\"string\"],\"disableModelSelection\":true},\"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,\"modelMappings\":[{\"sourceModelKey\":\"string\",\"targetModelKey\":\"string\",\"enabled\":true,\"createdTime\":\"string\",\"lastModifiedTime\":\"string\"}],\"realtimeTranscription\":{\"enabled\":true,\"provider\":\"openai\",\"apiKey\":\"string\",\"endpoint\":\"http://example.com\",\"model\":\"gpt-4o-mini-transcribe\",\"status\":\"untested\",\"testedAt\":\"string\",\"maxSessionDurationSec\":10,\"sessionCreateLimitPerMinute\":1},\"appConfig\":{\"vercelToken\":\"string\",\"customDomain\":\"string\",\"deployProvider\":\"vercel\",\"appAuth\":{\"google\":{\"clientId\":\"string\",\"clientSecret\":\"string\"},\"emailOtp\":{\"smtp\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}},\"badgeEnabled\":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/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 xl: 'string',\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 hiddenTiers: ['xl'],\n defaultTier: 'xl'\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 inputTiers: [{cost: 'string', min: 0, max: 0}],\n outputTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheReadTiers: [{cost: 'string', min: 0, max: 0}],\n inputCacheWriteTiers: [{cost: 'string', min: 0, max: 0}]\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: ['string'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string',\n i18nDescription: {en: 'string', zh: 'string'},\n recommended: true,\n recommendedDescription: {en: 'string', zh: 'string'}\n }\n ],\n capabilities: {disableActions: ['string'], disableModelSelection: true},\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 modelMappings: [\n {\n sourceModelKey: 'string',\n targetModelKey: 'string',\n enabled: true,\n createdTime: 'string',\n lastModifiedTime: 'string'\n }\n ],\n realtimeTranscription: {\n enabled: true,\n provider: 'openai',\n apiKey: 'string',\n endpoint: 'http://example.com',\n model: 'gpt-4o-mini-transcribe',\n status: 'untested',\n testedAt: 'string',\n maxSessionDurationSec: 10,\n sessionCreateLimitPerMinute: 1\n },\n appConfig: {\n vercelToken: 'string',\n customDomain: 'string',\n deployProvider: 'vercel',\n appAuth: {\n google: {clientId: 'string', clientSecret: 'string'},\n emailOtp: {\n smtp: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n }\n }\n },\n badgeEnabled: true\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\\\":{\\\"xl\\\":\\\"string\\\",\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"hiddenTiers\\\":[\\\"xl\\\"],\\\"defaultTier\\\":\\\"xl\\\"},\\\"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\\\",\\\"inputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"outputTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheReadTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}],\\\"inputCacheWriteTiers\\\":[{\\\"cost\\\":\\\"string\\\",\\\"min\\\":0,\\\"max\\\":0}]},\\\"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\\\":[\\\"string\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\",\\\"i18nDescription\\\":{\\\"en\\\":\\\"string\\\",\\\"zh\\\":\\\"string\\\"},\\\"recommended\\\":true,\\\"recommendedDescription\\\":{\\\"en\\\":\\\"string\\\",\\\"zh\\\":\\\"string\\\"}}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"],\\\"disableModelSelection\\\":true},\\\"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,\\\"modelMappings\\\":[{\\\"sourceModelKey\\\":\\\"string\\\",\\\"targetModelKey\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"createdTime\\\":\\\"string\\\",\\\"lastModifiedTime\\\":\\\"string\\\"}],\\\"realtimeTranscription\\\":{\\\"enabled\\\":true,\\\"provider\\\":\\\"openai\\\",\\\"apiKey\\\":\\\"string\\\",\\\"endpoint\\\":\\\"http://example.com\\\",\\\"model\\\":\\\"gpt-4o-mini-transcribe\\\",\\\"status\\\":\\\"untested\\\",\\\"testedAt\\\":\\\"string\\\",\\\"maxSessionDurationSec\\\":10,\\\"sessionCreateLimitPerMinute\\\":1},\\\"appConfig\\\":{\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"deployProvider\\\":\\\"vercel\\\",\\\"appAuth\\\":{\\\"google\\\":{\\\"clientId\\\":\\\"string\\\",\\\"clientSecret\\\":\\\"string\\\"},\\\"emailOtp\\\":{\\\"smtp\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}},\\\"badgeEnabled\\\":true}}}\"\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\n\nRequired token scopes: `space|update`","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 projects and nodes within a space\n\nRequired token scopes: `space|read`","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","routine"]},"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","routine"]},"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 projects\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["trash"],"security":[{"cookieAuth":[]}],"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","Space","base","Base","table","Table","app","App","workflow","Workflow","routine","Routine"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceId","resourceType","deletedTime","deletedBy"]},{"type":"object","properties":{"id":{"type":"string"},"resourceIds":{"type":"array","items":{"type":"string"}},"totalResourceCount":{"type":"number"},"resourceType":{"type":"string","enum":["view","View","field","Field","record","Record"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceIds","totalResourceCount","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"},"avatar":{"type":"string","nullable":true}},"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/{trashId}/records":{"get":{"summary":"Get deleted record snapshots of a trash item","description":"List the record snapshots contained in a record-type table trash item in deletion order (newest first), cursor-paginated across hot and cold storage. Record-level filters narrow the stream. Records that were restored or permanently deleted are omitted.","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"trashId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"take","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"recordCreatedBy","in":"query"},{"schema":{"type":"string"},"required":false,"name":"recordCreatedTimeStart","in":"query"},{"schema":{"type":"string"},"required":false,"name":"recordCreatedTimeEnd","in":"query"}],"responses":{"200":{"description":"Get trash item records successfully","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"recordId":{"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"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"},"recordCreatedTime":{"type":"string","nullable":true},"recordCreatedBy":{"type":"string","nullable":true},"recordLastModifiedTime":{"type":"string","nullable":true},"recordLastModifiedBy":{"type":"string","nullable":true}},"required":["id","recordId","record","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"]}},"nextCursor":{"type":"string","nullable":true}},"required":["items","userMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/trash/%7BtrashId%7D/records?tableId=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&recordCreatedBy=SOME_ARRAY_VALUE&recordCreatedTimeStart=SOME_STRING_VALUE&recordCreatedTimeEnd=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/%7BtrashId%7D/records?tableId=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&recordCreatedBy=SOME_ARRAY_VALUE&recordCreatedTimeStart=SOME_STRING_VALUE&recordCreatedTimeEnd=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/%7BtrashId%7D/records?tableId=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&recordCreatedBy=SOME_ARRAY_VALUE&recordCreatedTimeStart=SOME_STRING_VALUE&recordCreatedTimeEnd=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/%7BtrashId%7D/records?tableId=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&recordCreatedBy=SOME_ARRAY_VALUE&recordCreatedTimeStart=SOME_STRING_VALUE&recordCreatedTimeEnd=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 project 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"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"resourceTypes","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"deletedBy","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deletedTimeStart","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deletedTimeEnd","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","Space","base","Base","table","Table","app","App","workflow","Workflow","routine","Routine"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceId","resourceType","deletedTime","deletedBy"]},{"type":"object","properties":{"id":{"type":"string"},"resourceIds":{"type":"array","items":{"type":"string"}},"totalResourceCount":{"type":"number"},"resourceType":{"type":"string","enum":["view","View","field","Field","record","Record"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceIds","totalResourceCount","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"},"avatar":{"type":"string","nullable":true}},"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&resourceTypes=SOME_ARRAY_VALUE&deletedBy=SOME_ARRAY_VALUE&deletedTimeStart=SOME_STRING_VALUE&deletedTimeEnd=SOME_STRING_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&resourceTypes=SOME_ARRAY_VALUE&deletedBy=SOME_ARRAY_VALUE&deletedTimeStart=SOME_STRING_VALUE&deletedTimeEnd=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/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&resourceTypes=SOME_ARRAY_VALUE&deletedBy=SOME_ARRAY_VALUE&deletedTimeStart=SOME_STRING_VALUE&deletedTimeEnd=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/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&resourceTypes=SOME_ARRAY_VALUE&deletedBy=SOME_ARRAY_VALUE&deletedTimeStart=SOME_STRING_VALUE&deletedTimeEnd=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/reset-items":{"delete":{"description":"Clear trash items for the specified project or table.","tags":["base"],"x-mint":{"metadata":{"title":"Clear project or table trash","sidebarTitle":"Clear project or table trash","description":"Clear trash items for the specified project or table."}},"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"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"resourceTypes","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"deletedBy","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deletedTimeStart","in":"query"},{"schema":{"type":"string"},"required":false,"name":"deletedTimeEnd","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&resourceTypes=SOME_ARRAY_VALUE&deletedBy=SOME_ARRAY_VALUE&deletedTimeStart=SOME_STRING_VALUE&deletedTimeEnd=SOME_STRING_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&resourceTypes=SOME_ARRAY_VALUE&deletedBy=SOME_ARRAY_VALUE&deletedTimeStart=SOME_STRING_VALUE&deletedTimeEnd=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/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&resourceTypes=SOME_ARRAY_VALUE&deletedBy=SOME_ARRAY_VALUE&deletedTimeStart=SOME_STRING_VALUE&deletedTimeEnd=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/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&resourceTypes=SOME_ARRAY_VALUE&deletedBy=SOME_ARRAY_VALUE&deletedTimeStart=SOME_STRING_VALUE&deletedTimeEnd=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/restore/{trashId}":{"post":{"description":"restore a space, project, table, etc.","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"trashId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"tableId","in":"query"}],"responses":{"201":{"description":"Restored successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url 'https://app.teable.ai/api/trash/restore/%7BtrashId%7D?tableId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/restore/%7BtrashId%7D?tableId=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/trash/restore/%7BtrashId%7D?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(\"POST\", \"/api/trash/restore/%7BtrashId%7D?tableId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/restore-field/{trashId}/stream":{"post":{"summary":"Restore field trash with SSE progress","description":"Restore deleted fields and stream realtime v2 record value progress.","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"trashId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"tableId","in":"query"}],"responses":{"201":{"description":"SSE stream with restore progress events and final status"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url 'https://app.teable.ai/api/trash/restore-field/%7BtrashId%7D/stream?tableId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/restore-field/%7BtrashId%7D/stream?tableId=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/trash/restore-field/%7BtrashId%7D/stream?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(\"POST\", \"/api/trash/restore-field/%7BtrashId%7D/stream?tableId=SOME_STRING_VALUE\", 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.\n\nRequired token scopes: `record|update`","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":false,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":false,"name":"endDate","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"fieldIds","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"createdByIds","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"}],"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true},"deletedRecordIds":{"type":"array","items":{"type":"string"}}},"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true},"deletedRecordIds":{"type":"array","items":{"type":"string"}}},"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?startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&fieldIds=SOME_ARRAY_VALUE&createdByIds=SOME_ARRAY_VALUE&cursor=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/history?startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&fieldIds=SOME_ARRAY_VALUE&createdByIds=SOME_ARRAY_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/table/%7BtableId%7D/record/%7BrecordId%7D/history?startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&fieldIds=SOME_ARRAY_VALUE&createdByIds=SOME_ARRAY_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/table/%7BtableId%7D/record/%7BrecordId%7D/history?startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&fieldIds=SOME_ARRAY_VALUE&createdByIds=SOME_ARRAY_VALUE&cursor=SOME_STRING_VALUE\", 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.\n\nRequired token scopes: `table_record_history|read`","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":false,"name":"endDate","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"fieldIds","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"createdByIds","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"}],"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true},"deletedRecordIds":{"type":"array","items":{"type":"string"}}},"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true},"deletedRecordIds":{"type":"array","items":{"type":"string"}}},"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?startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&fieldIds=SOME_ARRAY_VALUE&createdByIds=SOME_ARRAY_VALUE&cursor=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/history?startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&fieldIds=SOME_ARRAY_VALUE&createdByIds=SOME_ARRAY_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/table/%7BtableId%7D/record/history?startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&fieldIds=SOME_ARRAY_VALUE&createdByIds=SOME_ARRAY_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/table/%7BtableId%7D/record/history?startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&fieldIds=SOME_ARRAY_VALUE&createdByIds=SOME_ARRAY_VALUE&cursor=SOME_STRING_VALUE\", 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\n\nRequired token scopes: `record|update`","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)\n\nRequired token scopes: `record|update`","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.\n\nRequired token scopes: `table|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"required":false,"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes.","name":"includeQueryExtra","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"},{"schema":{"type":"string","minLength":1,"description":"Opaque keyset cursor for the next page. Use the nextCursor returned by the previous page; it encodes the last row position for the current order. Cannot be combined with skip > 0."},"required":false,"description":"Opaque keyset cursor for the next page. Use the nextCursor returned by the previous page; it encodes the last row position for the current order. Cannot be combined with skip > 0.","name":"cursor","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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&cursor=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/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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&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/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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&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/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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&cursor=SOME_STRING_VALUE\", 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\n\nRequired token scopes: `record|update`","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\n\nRequired token scopes: `record|read`","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\n\nRequired token scopes: `record|update`","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.\n\nRequired token scopes: `record|read`","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.\n\nRequired token scopes: `record|create`","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\n\nRequired token scopes: `field|create`","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","nullable":true,"description":"Whether this field is not unique."},"notNull":{"type":"boolean","nullable":true,"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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+)?:\\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+)?:\\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"},"viewId":{"type":"string","description":"The id of the current view where the field is being created. Used to prevent auto-hiding the new field in this view."},"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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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\":{\"isUnique\":true,\"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\",\"viewId\":\"string\",\"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\":{\"isUnique\":true,\"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\",\"viewId\":\"string\",\"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 isUnique: true,\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 viewId: 'string',\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\\\":{\\\"isUnique\\\":true,\\\"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\\\",\\\"viewId\\\":\\\"string\\\",\\\"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\n\nRequired token scopes: `field|read`","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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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\n\nRequired token scopes: `field|delete`","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\n\nRequired token scopes: `field|delete`","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\n\nRequired token scopes: `field|read`","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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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\n\nRequired token scopes: `field|update`","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\n\nRequired token scopes: `field|update`","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","nullable":true,"description":"Whether this field is not unique."},"notNull":{"type":"boolean","nullable":true,"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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+)?:\\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+)?:\\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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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\":{\"isUnique\":true,\"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\":{\"isUnique\":true,\"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 isUnique: true,\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\\\":{\\\"isUnique\\\":true,\\\"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.\n\nRequired token scopes: `view|read`","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\n\nRequired token scopes: `field|update`","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 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\n\nRequired token scopes: `record|update`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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\n\nRequired token scopes: `record|update`","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\n\nRequired token scopes: `field|create`","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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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\"))"}]}},"/base/{baseId}/table/{tableId}/duplicate-check":{"get":{"description":"Check the cross-space link/lookup/rollup fields that would be converted if this table were duplicated.\n\nRequired token scopes: `table|read`","summary":"Check cross-space affected fields for table duplicate","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":"The list of cross-space affected fields.","content":{"application/json":{"schema":{"type":"object","properties":{"affectedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"type":{"type":"string"}},"required":["fieldId","fieldName","type"]}}},"required":["affectedFields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate-check \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate-check';\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/duplicate-check',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/duplicate-check\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/field/{fieldId}/duplicate-check":{"get":{"description":"Check whether this field would be downgraded to single line text on duplicate due to cross-space references. Returns an empty list when no downgrade is needed.\n\nRequired token scopes: `field|create`","summary":"Check cross-space affected fields for field duplicate","tags":["field"],"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":"fieldId","in":"path"}],"responses":{"200":{"description":"The list of cross-space affected fields (empty or single-entry).","content":{"application/json":{"schema":{"type":"object","properties":{"affectedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"type":{"type":"string"}},"required":["fieldId","fieldName","type"]}}},"required":["affectedFields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate-check \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate-check';\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/field/%7BfieldId%7D/duplicate-check',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/field/%7BfieldId%7D/duplicate-check\", headers=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)\n\nRequired token scopes: `field|delete`","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\n\nRequired token scopes: `view|create`","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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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\":{\"requireLogin\":true},\"allowEdit\":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\":{\"requireLogin\":true},\"allowEdit\":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: {requireLogin: true},\n allowEdit: 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\\\":{\\\"requireLogin\\\":true},\\\"allowEdit\\\":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\n\nRequired token scopes: `view|read`","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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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\n\nRequired token scopes: `view|delete`","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\n\nRequired token scopes: `view|read`","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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `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"}],"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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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\":{\"requireLogin\":true},\"allowEdit\":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\":{\"requireLogin\":true},\"allowEdit\":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: {requireLogin: true},\n allowEdit: 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\\\":{\\\"requireLogin\\\":true},\\\"allowEdit\\\":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\n\nRequired token scopes: `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 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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `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","description":"The share id of the view. Use it to access the shared view at `${endpoint}/share/{shareId}/view` (e.g. https://app.teable.ai/share/shrH7kunpHv8U9kfZyD/view)."}},"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\n\nRequired token scopes: `view|create`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|read`","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\n\nRequired token scopes: `view|update`","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\n\nRequired token scopes: `view|create`","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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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\":{\"requireLogin\":true},\"allowEdit\":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\":{\"requireLogin\":true},\"allowEdit\":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: {requireLogin: true},\n allowEdit: 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\\\":{\\\"requireLogin\\\":true},\\\"allowEdit\\\":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\n\nRequired token scopes: `record|read`","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\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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":"array","items":{"type":"string"},"description":"Limit search matching to these fields, e.g. the visible fields of a personal view. Only affects the search condition."},"required":false,"description":"Limit search matching to these fields, e.g. the visible fields of a personal view. Only affects the search condition.","name":"projection","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&projection=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&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/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&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/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&projection=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\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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\n\nRequired token scopes: `record|read`","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)\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"required":false,"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes.","name":"includeQueryExtra","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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&recordId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/selection":{"get":{"summary":"Aggregate a contiguous row range for grid selection","description":"Same shape as GET /aggregation, plus skip/take to scope the aggregation to a contiguous slice [skip, skip+take) of the view-ordered rows. Used by the grid selection statistic chip when the selection covers rows not loaded on the client.\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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 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"},{"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 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":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1},"required":true,"name":"take","in":"query"}],"responses":{"200":{"description":"Aggregation result for the selected row range","content":{"application/json":{"schema":{"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/selection?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&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE&orderBy=SOME_STRING_VALUE&collapsedGroupIds=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/table/%7BtableId%7D/aggregation/selection?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&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE&orderBy=SOME_STRING_VALUE&collapsedGroupIds=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/table/%7BtableId%7D/aggregation/selection?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&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE&orderBy=SOME_STRING_VALUE&collapsedGroupIds=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/table/%7BtableId%7D/aggregation/selection?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&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE&orderBy=SOME_STRING_VALUE&collapsedGroupIds=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\"))"}]}},"/base/{baseId}/table/":{"post":{"summary":"Create table","description":"Create a new table in the specified project with customizable fields, views, and initial records. Default configurations will be applied if not specified.\n\nRequired token scopes: `table|create`","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 project."},"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","nullable":true,"description":"Whether this field is not unique."},"notNull":{"type":"boolean","nullable":true,"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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+)?:\\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+)?:\\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"},"viewId":{"type":"string","description":"The id of the current view where the field is being created. Used to prevent auto-hiding the new field in this view."},"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 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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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, no records will be created."},"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 project."},"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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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\":{\"isUnique\":true,\"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\",\"viewId\":\"string\",\"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\":{\"requireLogin\":true},\"allowEdit\":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\":{\"isUnique\":true,\"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\",\"viewId\":\"string\",\"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\":{\"requireLogin\":true},\"allowEdit\":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 isUnique: true,\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 viewId: 'string',\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: {requireLogin: true},\n allowEdit: 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\\\":{\\\"isUnique\\\":true,\\\"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\\\",\\\"viewId\\\":\\\"string\\\",\\\"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\\\":{\\\"requireLogin\\\":true},\\\"allowEdit\\\":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.\n\nRequired token scopes: `table|delete`","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.\n\nRequired token scopes: `table|read`","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 project."},"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 project, including their basic information and configurations.\n\nRequired token scopes: `table|read`","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 project."},"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.\n\nRequired token scopes: `table|delete`","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.\n\nRequired token scopes: `table|update`","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 or remove the emoji icon of a table. The icon must be a valid emoji character. Set to null to remove the icon.\n\nRequired token scopes: `table|update`","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","nullable":true,"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 project. This affects the order in which tables are shown in the UI.\n\nRequired token scopes: `table|update`","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.\n\nRequired token scopes: `table|update`","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 project.\n\nRequired token scopes: `table|update`","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 project."}},"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\n\nRequired token scopes: `table|read`","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.\n\nRequired token scopes: `table|read`","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"}},"recordReadFilter":{"type":"object","description":"Row-level read filter the authority matrix applies to the current user; rows not matching it are invisible to this user. Absent when the user is unrestricted. Informational only: the server always enforces it on queries."}},"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\n\nRequired token scopes: `table|update`","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":{"get":{"summary":"Get activated index","description":"Get the activated index of a table\n\nRequired token scopes: `table|read`","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 GET \\\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: '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/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(\"GET\", \"/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}/search-vector-status":{"get":{"summary":"Get table search vector status","description":"Returns the read-only generated full-text search status for a table\n\nRequired token scopes: `table|read`","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":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"tableId":{"type":"string"},"state":{"type":"string","enum":["disabled","ready","rebuild_pending","stale","unknown"]},"configured":{"type":"boolean"},"active":{"type":"boolean"},"languageConfig":{"type":"string"},"coveredFieldCount":{"type":"integer","minimum":0}},"required":["tableId","state","configured","active","coveredFieldCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/search-vector-status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/search-vector-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/table/%7BtableId%7D/search-vector-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/table/%7BtableId%7D/search-vector-status\", 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.\n\nRequired token scopes: `table|read`","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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|create`","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\"))"}]}},"/base/{baseId}/table/{tableId}/delete-references":{"get":{"description":"Get fields on other tables that will be converted or errored when this table is deleted\n\nRequired token scopes: `table|read`","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":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"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":["dependentFields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/delete-references \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/delete-references';\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/delete-references',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/delete-references\", headers=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\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"required":false,"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes.","name":"includeQueryExtra","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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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\n\nRequired token scopes: `record|update`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"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\",\"includeQueryExtra\":\"string\",\"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\",\"includeQueryExtra\":\"string\",\"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 includeQueryExtra: 'string',\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\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"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/clear-stream":{"patch":{"summary":"Clear selected range content with SSE progress","description":"Clear selected table cells and stream realtime progress for each committed chunk.\n\nRequired token scopes: `record|update`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"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":"SSE stream with clear progress events and final result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/clear-stream \\\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\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/clear-stream';\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\",\"includeQueryExtra\":\"string\",\"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-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 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 includeQueryExtra: 'string',\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\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"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-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/clear-by-id-stream":{"patch":{"summary":"Clear selected records and fields by id with SSE progress","description":"Clear selected cells by id and stream realtime progress.\n\nRequired token scopes: `record|update`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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":"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."},"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":"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."},"collapsedGroupIds":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"projection":{"type":"array","items":{"type":"string"},"description":"Visible field ids for query-scoped field selection. If omitted, all visible view fields are used."},"selection":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"description":"Explicit selected record ids. If omitted, records are resolved from the current query scope. An empty array means no existing records are selected."},"excludeRecordIds":{"type":"array","items":{"type":"string"},"description":"Record ids to exclude from the current query scope, for inverse selections."},"fieldIds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Explicit selected field ids. If omitted, fields are resolved from visible query fields."}}}},"required":["selection"]}}}},"responses":{"200":{"description":"SSE stream with clear progress events and final result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/clear-by-id-stream \\\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"string\"],\"fieldIds\":[\"string\"]}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/clear-by-id-stream';\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"string\"],\"fieldIds\":[\"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/selection/clear-by-id-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 viewId: 'viwXXXXXXX',\n ignoreViewQuery: 'string',\n filterByTql: '{field} = \\'Completed\\' AND {field} > 5',\n filter: 'string',\n search: ['searchValue', 'fieldIdOrName', false],\n filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n selectedRecordIds: ['string'],\n orderBy: 'string',\n groupBy: 'string',\n collapsedGroupIds: 'string',\n queryId: 'qry_xxxxxxxx',\n includeQueryExtra: 'string',\n projection: ['string'],\n selection: {recordIds: ['string'], excludeRecordIds: ['string'], fieldIds: ['string']}\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\\\":\\\"string\\\",\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":\\\"string\\\",\\\"groupBy\\\":\\\"string\\\",\\\"collapsedGroupIds\\\":\\\"string\\\",\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"projection\\\":[\\\"string\\\"],\\\"selection\\\":{\\\"recordIds\\\":[\\\"string\\\"],\\\"excludeRecordIds\\\":[\\\"string\\\"],\\\"fieldIds\\\":[\\\"string\\\"]}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/clear-by-id-stream\", 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\n\nRequired token scopes: `record|delete`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"required":false,"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes.","name":"includeQueryExtra","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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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/clear-by-id":{"patch":{"summary":"Clear selected records and fields by id","description":"Clear selected cells using record and field identifiers instead of row ranges.\n\nRequired token scopes: `record|update`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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":"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."},"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":"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."},"collapsedGroupIds":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"projection":{"type":"array","items":{"type":"string"},"description":"Visible field ids for query-scoped field selection. If omitted, all visible view fields are used."},"selection":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"description":"Explicit selected record ids. If omitted, records are resolved from the current query scope. An empty array means no existing records are selected."},"excludeRecordIds":{"type":"array","items":{"type":"string"},"description":"Record ids to exclude from the current query scope, for inverse selections."},"fieldIds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Explicit selected field ids. If omitted, fields are resolved from visible query fields."}}}},"required":["selection"]}}}},"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-by-id \\\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"string\"],\"fieldIds\":[\"string\"]}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/clear-by-id';\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"string\"],\"fieldIds\":[\"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/selection/clear-by-id',\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: 'string',\n search: ['searchValue', 'fieldIdOrName', false],\n filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n selectedRecordIds: ['string'],\n orderBy: 'string',\n groupBy: 'string',\n collapsedGroupIds: 'string',\n queryId: 'qry_xxxxxxxx',\n includeQueryExtra: 'string',\n projection: ['string'],\n selection: {recordIds: ['string'], excludeRecordIds: ['string'], fieldIds: ['string']}\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\\\":\\\"string\\\",\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":\\\"string\\\",\\\"groupBy\\\":\\\"string\\\",\\\"collapsedGroupIds\\\":\\\"string\\\",\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"projection\\\":[\\\"string\\\"],\\\"selection\\\":{\\\"recordIds\\\":[\\\"string\\\"],\\\"excludeRecordIds\\\":[\\\"string\\\"],\\\"fieldIds\\\":[\\\"string\\\"]}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/clear-by-id\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/paste-by-id":{"patch":{"summary":"Paste content by selected record and field ids","description":"Apply paste content using record and field identifiers instead of row ranges.\n\nRequired token scopes: `record|update`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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":"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."},"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":"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."},"collapsedGroupIds":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"projection":{"type":"array","items":{"type":"string"},"description":"Visible field ids for query-scoped field selection. If omitted, all visible view fields are used."},"selection":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"description":"Explicit selected record ids. If omitted, records are resolved from the current query scope. An empty array means no existing records are selected."},"excludeRecordIds":{"type":"array","items":{"type":"string"},"description":"Record ids to exclude from the current query scope, for inverse selections."},"fieldIds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Explicit selected field ids. If omitted, fields are resolved from visible query fields."}}},"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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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":["selection","content"]}}}},"responses":{"200":{"description":"Paste successfully","content":{"application/json":{"schema":{"type":"object","properties":{"selection":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"}},"fieldIds":{"type":"array","items":{"type":"string"}}},"required":["recordIds","fieldIds"]},"pastedRecordIds":{"type":"array","items":{"type":"string"}},"pastedFieldIds":{"type":"array","items":{"type":"string"}},"createdRecordIds":{"type":"array","items":{"type":"string"}},"createdFieldIds":{"type":"array","items":{"type":"string"}},"createdChoiceIdsByFieldId":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"createdForeignRecordIds":{"type":"array","items":{"type":"string"}},"skippedAttachments":{"type":"array","items":{"nullable":true}}},"required":["selection"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/paste-by-id \\\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"string\"],\"fieldIds\":[\"string\"]},\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/paste-by-id';\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"string\"],\"fieldIds\":[\"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/paste-by-id',\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: 'string',\n search: ['searchValue', 'fieldIdOrName', false],\n filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n selectedRecordIds: ['string'],\n orderBy: 'string',\n groupBy: 'string',\n collapsedGroupIds: 'string',\n queryId: 'qry_xxxxxxxx',\n includeQueryExtra: 'string',\n projection: ['string'],\n selection: {recordIds: ['string'], excludeRecordIds: ['string'], fieldIds: ['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\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"filterByTql\\\":\\\"{field} = 'Completed' AND {field} > 5\\\",\\\"filter\\\":\\\"string\\\",\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":\\\"string\\\",\\\"groupBy\\\":\\\"string\\\",\\\"collapsedGroupIds\\\":\\\"string\\\",\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"projection\\\":[\\\"string\\\"],\\\"selection\\\":{\\\"recordIds\\\":[\\\"string\\\"],\\\"excludeRecordIds\\\":[\\\"string\\\"],\\\"fieldIds\\\":[\\\"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/paste-by-id\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/delete-by-id":{"post":{"summary":"Delete selected records by id","description":"Delete selected records using record identifiers or a query scope with exclusions.\n\nRequired token scopes: `record|delete`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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":"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."},"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":"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."},"collapsedGroupIds":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"selection":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"description":"Explicit selected record ids. If omitted, records are resolved from the current query scope. An empty array means no existing records are selected."},"excludeRecordIds":{"type":"array","items":{"type":"string"},"description":"Record ids to exclude from the current query scope, for inverse selections."}}}},"required":["selection"]}}}},"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 POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/delete-by-id \\\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"string\"]}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/delete-by-id';\nconst options = {\n method: 'POST',\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"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/selection/delete-by-id',\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: 'string',\n search: ['searchValue', 'fieldIdOrName', false],\n filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n selectedRecordIds: ['string'],\n orderBy: 'string',\n groupBy: 'string',\n collapsedGroupIds: 'string',\n queryId: 'qry_xxxxxxxx',\n includeQueryExtra: 'string',\n selection: {recordIds: ['string'], excludeRecordIds: ['string']}\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\\\":\\\"string\\\",\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":\\\"string\\\",\\\"groupBy\\\":\\\"string\\\",\\\"collapsedGroupIds\\\":\\\"string\\\",\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"selection\\\":{\\\"recordIds\\\":[\\\"string\\\"],\\\"excludeRecordIds\\\":[\\\"string\\\"]}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/selection/delete-by-id\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/paste-by-id-stream":{"patch":{"summary":"Paste content by record and field ids with SSE progress","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"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"},"selection":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"}},"fieldIds":{"type":"array","items":{"type":"string"}},"excludedRecordIds":{"type":"array","items":{"type":"string"}},"excludedFieldIds":{"type":"array","items":{"type":"string"}},"allRecords":{"type":"boolean"},"allFields":{"type":"boolean"}}},"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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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":["selection","content"]}}}},"responses":{"200":{"description":"SSE stream with paste progress events and final result"}},"description":"Required token scopes: `record|update`","x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/paste-by-id-stream \\\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\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"fieldIds\":[\"string\"],\"excludedRecordIds\":[\"string\"],\"excludedFieldIds\":[\"string\"],\"allRecords\":true,\"allFields\":true},\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/paste-by-id-stream';\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\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"fieldIds\":[\"string\"],\"excludedRecordIds\":[\"string\"],\"excludedFieldIds\":[\"string\"],\"allRecords\":true,\"allFields\":true},\"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-by-id-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 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 includeQueryExtra: 'string',\n projection: ['string'],\n selection: {\n recordIds: ['string'],\n fieldIds: ['string'],\n excludedRecordIds: ['string'],\n excludedFieldIds: ['string'],\n allRecords: true,\n allFields: true\n },\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\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"projection\\\":[\\\"string\\\"],\\\"selection\\\":{\\\"recordIds\\\":[\\\"string\\\"],\\\"fieldIds\\\":[\\\"string\\\"],\\\"excludedRecordIds\\\":[\\\"string\\\"],\\\"excludedFieldIds\\\":[\\\"string\\\"],\\\"allRecords\\\":true,\\\"allFields\\\":true},\\\"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-by-id-stream\", 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\n\nRequired token scopes: `record|read`, `record|copy`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"required":false,"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes.","name":"includeQueryExtra","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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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&includeQueryExtra=SOME_STRING_VALUE&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/copy-by-id":{"post":{"summary":"Copy selected table content by record and field ids","description":"Copy content using record and field identifiers instead of row ranges.\n\nRequired token scopes: `record|read`, `record|copy`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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":"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."},"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":"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."},"collapsedGroupIds":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"projection":{"type":"array","items":{"type":"string"},"description":"Visible field ids for query-scoped field selection. If omitted, all visible view fields are used."},"selection":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"description":"Explicit selected record ids. If omitted, records are resolved from the current query scope. An empty array means no existing records are selected."},"excludeRecordIds":{"type":"array","items":{"type":"string"},"description":"Record ids to exclude from the current query scope, for inverse selections."},"fieldIds":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Explicit selected field ids. If omitted, fields are resolved from visible query fields."}}}},"required":["selection"]}}}},"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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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 POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/copy-by-id \\\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"string\"],\"fieldIds\":[\"string\"]}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/copy-by-id';\nconst options = {\n method: 'POST',\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\":\"string\",\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":\"string\",\"groupBy\":\"string\",\"collapsedGroupIds\":\"string\",\"queryId\":\"qry_xxxxxxxx\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"excludeRecordIds\":[\"string\"],\"fieldIds\":[\"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/selection/copy-by-id',\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: 'string',\n search: ['searchValue', 'fieldIdOrName', false],\n filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n selectedRecordIds: ['string'],\n orderBy: 'string',\n groupBy: 'string',\n collapsedGroupIds: 'string',\n queryId: 'qry_xxxxxxxx',\n includeQueryExtra: 'string',\n projection: ['string'],\n selection: {recordIds: ['string'], excludeRecordIds: ['string'], fieldIds: ['string']}\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\\\":\\\"string\\\",\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":\\\"string\\\",\\\"groupBy\\\":\\\"string\\\",\\\"collapsedGroupIds\\\":\\\"string\\\",\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"projection\\\":[\\\"string\\\"],\\\"selection\\\":{\\\"recordIds\\\":[\\\"string\\\"],\\\"excludeRecordIds\\\":[\\\"string\\\"],\\\"fieldIds\\\":[\\\"string\\\"]}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/selection/copy-by-id\", payload, 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\n\nRequired token scopes: `record|update`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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\",\"includeQueryExtra\":\"string\",\"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\",\"includeQueryExtra\":\"string\",\"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 includeQueryExtra: 'string',\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\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"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/paste-stream":{"patch":{"summary":"Paste content with SSE progress","description":"Apply paste operation to the selected table range and stream realtime progress for each committed chunk.\n\nRequired token scopes: `record|update`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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":"SSE stream with paste progress events and final result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/paste-stream \\\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\",\"includeQueryExtra\":\"string\",\"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-stream';\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\",\"includeQueryExtra\":\"string\",\"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-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 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 includeQueryExtra: 'string',\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\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"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-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/delete-stream":{"get":{"summary":"Delete selected range data with SSE progress","description":"Delete records within the selected table range and stream realtime progress. Each successful chunk commits independently; disconnecting the client will not roll back already committed chunks.\n\nRequired token scopes: `record|delete`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"required":false,"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes.","name":"includeQueryExtra","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":"SSE stream with deletion progress events and final result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/delete-stream?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&includeQueryExtra=SOME_STRING_VALUE&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-stream?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&includeQueryExtra=SOME_STRING_VALUE&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/delete-stream?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&includeQueryExtra=SOME_STRING_VALUE&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/delete-stream?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&includeQueryExtra=SOME_STRING_VALUE&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/delete-by-id-stream":{"patch":{"summary":"Delete selected records by ids with SSE progress","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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."},"includeQueryExtra":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"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"},"selection":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"}},"fieldIds":{"type":"array","items":{"type":"string"}},"excludedRecordIds":{"type":"array","items":{"type":"string"}},"excludedFieldIds":{"type":"array","items":{"type":"string"}},"allRecords":{"type":"boolean"},"allFields":{"type":"boolean"}}}},"required":["selection"]}}}},"responses":{"200":{"description":"SSE stream with delete progress events and final result"}},"description":"Required token scopes: `record|delete`","x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/delete-by-id-stream \\\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\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"fieldIds\":[\"string\"],\"excludedRecordIds\":[\"string\"],\"excludedFieldIds\":[\"string\"],\"allRecords\":true,\"allFields\":true}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/delete-by-id-stream';\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\",\"includeQueryExtra\":\"string\",\"projection\":[\"string\"],\"selection\":{\"recordIds\":[\"string\"],\"fieldIds\":[\"string\"],\"excludedRecordIds\":[\"string\"],\"excludedFieldIds\":[\"string\"],\"allRecords\":true,\"allFields\":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/table/%7BtableId%7D/selection/delete-by-id-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 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 includeQueryExtra: 'string',\n projection: ['string'],\n selection: {\n recordIds: ['string'],\n fieldIds: ['string'],\n excludedRecordIds: ['string'],\n excludedFieldIds: ['string'],\n allRecords: true,\n allFields: true\n }\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\\\",\\\"includeQueryExtra\\\":\\\"string\\\",\\\"projection\\\":[\\\"string\\\"],\\\"selection\\\":{\\\"recordIds\\\":[\\\"string\\\"],\\\"fieldIds\\\":[\\\"string\\\"],\\\"excludedRecordIds\\\":[\\\"string\\\"],\\\"excludedFieldIds\\\":[\\\"string\\\"],\\\"allRecords\\\":true,\\\"allFields\\\":true}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/delete-by-id-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/duplicate-stream":{"get":{"summary":"Duplicate selected records with SSE progress","description":"Duplicate records within the selected table range and stream realtime progress. Each successful chunk commits independently; disconnecting the client will not roll back already committed chunks.\n\nRequired token scopes: `record|read`, `record|create`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"required":false,"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes.","name":"includeQueryExtra","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":"SSE stream with duplication progress events and final result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/duplicate-stream?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&includeQueryExtra=SOME_STRING_VALUE&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/duplicate-stream?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&includeQueryExtra=SOME_STRING_VALUE&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/duplicate-stream?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&includeQueryExtra=SOME_STRING_VALUE&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/duplicate-stream?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&includeQueryExtra=SOME_STRING_VALUE&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\n\nRequired token scopes: `record|read`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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\n\nRequired token scopes: `field|read`","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\n\nRequired token scopes: `field|update`","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","nullable":true,"description":"Whether this field is not unique."},"notNull":{"type":"boolean","nullable":true,"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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+)?:\\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+)?:\\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\":{\"isUnique\":true,\"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\":{\"isUnique\":true,\"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 isUnique: true,\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\\\":{\\\"isUnique\\\":true,\\\"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\n\nRequired token scopes: `field|delete`","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\n\nRequired token scopes: `field|create`","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","nullable":true,"description":"Whether this field is not unique."},"notNull":{"type":"boolean","nullable":true,"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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+)?:\\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+)?:\\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"},"viewId":{"type":"string","description":"The id of the current view where the field is being created. Used to prevent auto-hiding the new field in this view."},"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\":{\"isUnique\":true,\"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\",\"viewId\":\"string\",\"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\":{\"isUnique\":true,\"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\",\"viewId\":\"string\",\"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 isUnique: true,\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 viewId: 'string',\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\\\":{\\\"isUnique\\\":true,\\\"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\\\",\\\"viewId\\\":\\\"string\\\",\\\"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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100}},"required":["name"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/name \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/avatar \\\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'};\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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.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\nconn.request(\"PATCH\", \"/api/user/avatar\", payload)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/notify-meta":{"patch":{"description":"Update user notification meta\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"boolean"},"appBuilderChatIntroDismissed":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/notify-meta \\\n --header 'content-type: application/json' \\\n --data '{\"email\":true,\"appBuilderChatIntroDismissed\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/notify-meta';\nconst options = {\n method: 'PATCH',\n headers: {'content-type': 'application/json'},\n body: '{\"email\":true,\"appBuilderChatIntroDismissed\":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 '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, appBuilderChatIntroDismissed: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":true,\\\"appBuilderChatIntroDismissed\\\":true}\"\n\nheaders = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lang":{"type":"string"}},"required":["lang"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/lang \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine"]},"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","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}},"x-excluded":true,"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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Update or create user last visit record\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine"]},"resourceId":{"type":"string"},"parentResourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId","parentResourceId"]}}}},"responses":{"201":{"description":"Successfully updated user last visit record."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user/last-visit \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine"]},"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","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}}},"x-excluded":true,"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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/list-base":{"get":{"tags":["user"],"x-mint":{"metadata":{"title":"Get userlast visitlist project","sidebarTitle":"Get userlast visitlist project"}},"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Returns data about user last visit project.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number"},"list":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine"]},"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"},"personalOrder":{"type":"number"},"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"},"v2Status":{"type":"object","properties":{"useV2":{"type":"boolean"},"reason":{"type":"string","enum":["env_force_v2_all","config_force_v2_all","new_base","header_override","space_feature","unsupported_feature","disabled","feature_not_enabled","no_feature"]}},"required":["useV2","reason"]},"isShared":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]},"lastVisitTime":{"type":"string"}},"required":["resourceType","resourceId","resource"]}}},"required":["total","list"]}}}}},"x-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token.","x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/user/last-visit/list-base"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/list-base';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/user/last-visit/list-base\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/base-node":{"get":{"description":"Get user last visited project node\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"x-mint":{"metadata":{"title":"Get userlast visitproject node","sidebarTitle":"Get userlast visitproject node","description":"Get user last visited project node"}},"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit project node.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/track":{"post":{"description":"Track a frontend event\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"event":{"type":"string","minLength":1,"maxLength":100},"properties":{"type":"object","additionalProperties":{"nullable":true}}},"required":["event"]}}}},"responses":{"204":{"description":"Event tracked successfully."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user/track \\\n --header 'content-type: application/json' \\\n --data '{\"event\":\"string\",\"properties\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/track';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"event\":\"string\",\"properties\":{\"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/user/track',\n headers: {\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({event: 'string', properties: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"event\\\":\\\"string\\\",\\\"properties\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/user/track\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/user/me":{"get":{"description":"Get user information\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"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"},"appBuilderChatIntroDismissed":{"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/user/me"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user/me';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/auth/user/me\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signin":{"post":{"description":"Sign in","tags":["auth"],"security":[],"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"},"appBuilderChatIntroDismissed":{"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/auth/signin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signin-with-code":{"post":{"description":"Sign in with the verification code sent to the email","tags":["auth"],"security":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"code":{"type":"string","minLength":1}},"required":["email","code"]}}}},"responses":{"200":{"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"},"appBuilderChatIntroDismissed":{"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-with-code \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"code\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signin-with-code';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"email\":\"user@example.com\",\"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/signin-with-code',\n headers: {\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', code: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"code\\\":\\\"string\\\"}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/auth/signin-with-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signout":{"post":{"description":"Sign out\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"responses":{"201":{"description":"Sign out successfully"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/signout"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signout';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/auth/signout\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signup":{"post":{"description":"Sign up","tags":["auth"],"security":[],"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","minLength":1,"maxLength":100},"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"},"appBuilderChatIntroDismissed":{"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/auth/change-password \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/add-password \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/auth/add-password\", payload, 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":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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/send-signin-verification-code":{"post":{"description":"Send a one-time sign-in verification code to a registered email. No captcha is required.","tags":["auth"],"security":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"200":{"description":"Sign-in verification code sent successfully","content":{"application/json":{"schema":{"type":"object","properties":{"expiresTime":{"type":"string"}},"required":["expiresTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/send-signin-verification-code \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-signin-verification-code';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\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-signin-verification-code',\n headers: {\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 = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/auth/send-signin-verification-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/change-email":{"patch":{"description":"Change email\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/auth/change-email \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/send-change-email-code \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Get temp token successfully","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"expiresTime":{"type":"string"}},"required":["accessToken","expiresTime"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/temp-token"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/temp-token';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/auth/temp-token\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/invite-waitlist":{"post":{"description":"Invite waitlist\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nRequired token scopes: `instance|read`","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\"))"}]}},"/auth/mobile/code":{"post":{"description":"Issue a one-time sign-in code for the mobile app (PKCE)\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"codeChallenge":{"type":"string","pattern":"^[\\w-]{43}$"},"state":{"type":"string","minLength":1,"maxLength":256},"redirectUri":{"type":"string","minLength":1,"maxLength":2048}},"required":["codeChallenge","state","redirectUri"]}}}},"responses":{"201":{"description":"The app redirect URL carrying the code","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/mobile/code \\\n --header 'content-type: application/json' \\\n --data '{\"codeChallenge\":\"string\",\"state\":\"string\",\"redirectUri\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/mobile/code';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"codeChallenge\":\"string\",\"state\":\"string\",\"redirectUri\":\"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/mobile/code',\n headers: {\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({codeChallenge: 'string', state: 'string', redirectUri: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"codeChallenge\\\":\\\"string\\\",\\\"state\\\":\\\"string\\\",\\\"redirectUri\\\":\\\"string\\\"}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/auth/mobile/code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/mobile/exchange":{"post":{"description":"Exchange a mobile sign-in code for a session; the response sets the session cookie","tags":["auth"],"security":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","minLength":1,"maxLength":256},"codeVerifier":{"type":"string","pattern":"^[\\w\\-.~]{43,128}$"}},"required":["code","codeVerifier"]}}}},"responses":{"200":{"description":"Signed in","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"},"appBuilderChatIntroDismissed":{"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/mobile/exchange \\\n --header 'content-type: application/json' \\\n --data '{\"code\":\"string\",\"codeVerifier\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/mobile/exchange';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"code\":\"string\",\"codeVerifier\":\"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/mobile/exchange',\n headers: {\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({code: 'string', codeVerifier: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"code\\\":\\\"string\\\",\\\"codeVerifier\\\":\\\"string\\\"}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/auth/mobile/exchange\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/mobile/web-session-code":{"post":{"description":"Issue a one-time code that signs a WebView in through GET /auth/mobile/web-session\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"responses":{"201":{"description":"The code","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/mobile/web-session-code"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/mobile/web-session-code';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/mobile/web-session-code',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/auth/mobile/web-session-code\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/mobile/web-session":{"get":{"description":"Sign the browser in with a web-session code and redirect (a navigation, not an XHR)","tags":["auth"],"security":[],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":256},"required":true,"name":"code","in":"query"},{"schema":{"type":"string","maxLength":2048},"required":false,"name":"redirect","in":"query"}],"responses":{"302":{"description":"Redirects to `redirect` (same-origin path) or /space"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/auth/mobile/web-session?code=SOME_STRING_VALUE&redirect=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/mobile/web-session?code=SOME_STRING_VALUE&redirect=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/mobile/web-session?code=SOME_STRING_VALUE&redirect=SOME_STRING_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/auth/mobile/web-session?code=SOME_STRING_VALUE&redirect=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/connection":{"post":{"description":"Create a db connection url\n\nRequired token scopes: `base|db_connection`","tags":["db-connection"],"x-mint":{"metadata":{"title":"Post project connection","sidebarTitle":"Post project connection","description":"Create a db connection url"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"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\n\nRequired token scopes: `base|db_connection`","tags":["db-connection"],"x-mint":{"metadata":{"title":"Delete project connection","sidebarTitle":"Delete project connection","description":"Delete a 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\n\nRequired token scopes: `base|db_connection`","tags":["db-connection"],"x-mint":{"metadata":{"title":"Get project connection","sidebarTitle":"Get project connection","description":"Get db connection info"}},"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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["invitation"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/invitation/link/accept \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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":[],"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","description":"The share id of the view. Use it to access the shared view at `${endpoint}/share/{shareId}/view` (e.g. https://app.teable.ai/share/shrH7kunpHv8U9kfZyD/view)."},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view\")\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":[],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"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":"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/share/%7BshareId%7D/view/aggregations?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'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/aggregations?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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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?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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/aggregations?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\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":[],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"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?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'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/row-count?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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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?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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/row-count?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\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":[],"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":{"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":"boolean"}],"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes."},"required":false,"description":"Whether to include query extra metadata such as group points and search hit indexes. Group metadata defaults to enabled; optimized generated-index searches require explicit opt-in for search hit indexes.","name":"includeQueryExtra","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"},{"schema":{"type":"string","minLength":1,"description":"Opaque keyset cursor for the next page. Use the nextCursor returned by the previous page; it encodes the last row position for the current order. Cannot be combined with skip > 0."},"required":false,"description":"Opaque keyset cursor for the next page. Use the nextCursor returned by the previous page; it encodes the last row position for the current order. Cannot be combined with skip > 0.","name":"cursor","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"},"nextCursor":{"type":"string","minLength":1,"description":"Keyset cursor for fetching the next page without OFFSET"}}}},"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&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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&cursor=SOME_STRING_VALUE'"},{"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&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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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&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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&cursor=SOME_STRING_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=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&includeQueryExtra=SOME_STRING_VALUE&take=100&skip=0&cursor=SOME_STRING_VALUE\")\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":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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":[],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"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":{"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":"Selection coordinates encoded as JSON","example":"[[0, 0], [1, 1]]"},"required":true,"description":"Selection coordinates encoded as JSON","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","nullable":true,"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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."}}},{"nullable":true}],"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+)?:\\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+)?:\\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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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"},"filterByViewId":{"type":"string","nullable":true,"description":"Optional foreign view used to filter lookup candidates."},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Optional foreign fields shown when presenting lookup-linked records."},"isOneWay":{"type":"boolean","description":"Whether the underlying relationship is stored as one-way. Present in some persisted lookup payloads."},"symmetricFieldId":{"type":"string","description":"Optional symmetric link field id preserved on some lookup payloads for compatibility."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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},{"nullable":true}],"description":"field lookup options."},"notNull":{"type":"boolean","nullable":true,"description":"Whether this field is not null."},"unique":{"type":"boolean","nullable":true,"description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","nullable":true,"description":"Whether this field is primary field."},"isComputed":{"type":"boolean","nullable":true,"description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","nullable":true,"description":"Whether this field's calculation is pending."},"computeMeta":{"type":"object","nullable":true,"properties":{"status":{"type":"string","enum":["idle","queued","running","failed"]},"estimatedComplexity":{"type":"number"},"estimatedDirtyRecords":{"type":"number"},"startedAt":{"type":"string"},"lastDurationMs":{"type":"number"},"lastError":{"type":"object","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["message"]}},"required":["status"],"description":"Async computed activity for this field (formula/lookup/rollup recalculation status)."},"hasError":{"type":"boolean","nullable":true,"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","nullable":true,"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","nullable":true,"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","nullable":true,"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?filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=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'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/copy?filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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?filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/copy?filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=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\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":[],"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"}],"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'"},{"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';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\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\")\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":[],"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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\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\")\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":[],"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"]}}}}}},"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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\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\")\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":[],"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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\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\")\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":[],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\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\")\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":[],"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"},"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&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE'"},{"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&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE\")\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":[],"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"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/short-link":{"post":{"description":"Create (or reuse) the short link of a resource\n\nSession (cookie) authentication only. Not callable with an access token.","summary":"Create a short link","tags":["short-link"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["view-share","base-share","template","artifact"],"description":"The type of resource the short link points to"},"resourceId":{"type":"string","minLength":1,"maxLength":50,"description":"The resource identifier, e.g. a shareId (shrxxx) or templateId (tplxxx)"}},"required":["type","resourceId"]}}}},"responses":{"201":{"description":"Successfully created short link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"The short link code, accessible at /s/{code}"},"path":{"type":"string","description":"The in-app path the short link currently redirects to"}},"required":["code","path"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/short-link \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"view-share\",\"resourceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/short-link';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"type\":\"view-share\",\"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/short-link',\n headers: {\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: 'view-share', resourceId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"view-share\\\",\\\"resourceId\\\":\\\"string\\\"}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/short-link\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/short-link/{code}":{"get":{"description":"Resolve a short link code to its target path","summary":"Resolve a short link","tags":["short-link"],"security":[],"parameters":[{"schema":{"type":"string"},"required":true,"name":"code","in":"path"}],"responses":{"200":{"description":"Successfully resolved short link.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"The short link code, accessible at /s/{code}"},"path":{"type":"string","description":"The in-app path the short link currently redirects to"}},"required":["code","path"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/short-link/%7Bcode%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/short-link/%7Bcode%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/short-link/%7Bcode%7D',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/short-link/%7Bcode%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications":{"get":{"description":"List a user notification\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["notification"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["unread","read"]},"required":true,"name":"notifyStates","in":"query"},{"schema":{"type":"string","enum":["critical","warning","info"]},"required":false,"name":"severity","in":"query"},{"schema":{"type":"string","enum":["system","collaboratorCellTag","collaboratorMultiRowTag","comment","exportBase","adminNotice","collaboratorInvite"]},"required":false,"name":"notifyType","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","adminNotice","collaboratorInvite"]},"url":{"type":"string"},"message":{"type":"string"},"messageI18n":{"type":"string","nullable":true},"severity":{"type":"string","enum":["critical","warning","info"]},"isRead":{"type":"boolean"},"createdTime":{"type":"string"}},"required":["id","notifyIcon","notifyType","url","message","severity","isRead","createdTime"]}},"nextCursor":{"type":"string","nullable":true},"summary":{"type":"object","properties":{"critical":{"type":"number"},"warning":{"type":"number"},"info":{"type":"number"}},"required":["critical","warning","info"]}},"required":["notifications","summary"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/notifications?notifyStates=SOME_STRING_VALUE&severity=SOME_STRING_VALUE¬ifyType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications?notifyStates=SOME_STRING_VALUE&severity=SOME_STRING_VALUE¬ifyType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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&severity=SOME_STRING_VALUE¬ifyType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/notifications?notifyStates=SOME_STRING_VALUE&severity=SOME_STRING_VALUE¬ifyType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/{notificationId}/status":{"patch":{"description":"Patch notification status\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["notification"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/notifications/%7BnotificationId%7D/status \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["notification"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Returns successfully"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/notifications/read-all"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/read-all';\nconst options = {method: 'PATCH'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"PATCH\", \"/api/notifications/read-all\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/unread-count":{"get":{"description":"User notification unread count\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["notification"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/notifications/unread-count"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/unread-count';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/notifications/unread-count\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token":{"post":{"description":"Create access token\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["access-token"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["space|create","space|delete","space|read","space|update","space|invite_email","space|invite_link","space|grant_role","base|create","base|delete","base|read","base|read_all","base|update","base|invite_email","base|invite_link","base|table_import","base|table_export","base|authority_matrix_config","base|db_connection","base|query_data","table|create","table|delete","table|read","table|update","table|import","table|export","table|trash_read","table|trash_update","table|trash_reset","table|archive_read","table|archive_manage","view|create","view|delete","view|read","view|update","view|share","field|create","field|delete","field|read","field|update","record|create","record|delete","record|read","record|update","record|comment","record|copy","record|archive","table_record_history|read","automation|create","automation|delete","automation|read","automation|update","routine|create","routine|delete","routine|read","routine|update","app|create","app|delete","app|read","app|update","user|email_read","user|integrations","instance|read","instance|update","enterprise|read","enterprise|update"]},"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/access-token \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"space|create\"],\"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: {'content-type': 'application/json'},\n body: '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"space|create\"],\"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 '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: ['space|create'],\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\\\":[\\\"space|create\\\"],\\\"spaceIds\\\":[\\\"string\\\"],\\\"baseIds\\\":[\\\"string\\\"],\\\"hasFullAccess\\\":true,\\\"expiredTime\\\":\\\"2024-03-25\\\"}\"\n\nheaders = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["access-token"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/access-token"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/access-token\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token/{id}/refresh":{"post":{"description":"Refresh access token\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["access-token"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D/refresh \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["access-token"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Access token deleted."}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/access-token/%7Bid%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update access token\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["access-token"],"security":[{"cookieAuth":[]}],"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","enum":["space|create","space|delete","space|read","space|update","space|invite_email","space|invite_link","space|grant_role","base|create","base|delete","base|read","base|read_all","base|update","base|invite_email","base|invite_link","base|table_import","base|table_export","base|authority_matrix_config","base|db_connection","base|query_data","table|create","table|delete","table|read","table|update","table|import","table|export","table|trash_read","table|trash_update","table|trash_reset","table|archive_read","table|archive_manage","view|create","view|delete","view|read","view|update","view|share","field|create","field|delete","field|read","field|update","record|create","record|delete","record|read","record|update","record|comment","record|copy","record|archive","table_record_history|read","automation|create","automation|delete","automation|read","automation|update","routine|create","routine|delete","routine|read","routine|update","app|create","app|delete","app|read","app|update","user|email_read","user|integrations","instance|read","instance|update","enterprise|read","enterprise|update"]},"minItems":1},"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"space|create\"],\"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: {'content-type': 'application/json'},\n body: '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"space|create\"],\"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 '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: ['space|create'],\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\\\":[\\\"space|create\\\"],\\\"spaceIds\\\":[\\\"string\\\"],\\\"baseIds\\\":[\\\"string\\\"],\\\"hasFullAccess\\\":true}\"\n\nheaders = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["access-token"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/access-token/%7Bid%7D\")\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\n\nRequired token scopes: `base|table_import`","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"},"folderId":{"type":"string","description":"Target folder (node id or folder id); tables land at root when omitted."}},"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 project."},"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\",\"folderId\":\"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\",\"folderId\":\"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 folderId: '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\\\",\\\"folderId\\\":\\\"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}/stream":{"post":{"summary":"Create tables from a file with SSE progress","description":"Create one table per worksheet and stream realtime import progress for each committed row batch.\n\nRequired token scopes: `base|table_import`","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"},"folderId":{"type":"string","description":"Target folder (node id or folder id); tables land at root when omitted."}},"required":["worksheets","attachmentUrl","fileType","tz"]}}}},"responses":{"200":{"description":"SSE stream with import progress events and the created tables"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/import/%7BbaseId%7D/stream \\\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\",\"folderId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/%7BbaseId%7D/stream';\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\",\"folderId\":\"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/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 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 folderId: '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\\\",\\\"folderId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/import/%7BbaseId%7D/stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/{baseId}/{tableId}":{"patch":{"description":"import table inplace\n\nRequired token scopes: `table|import`","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\"))"}]}},"/import/{baseId}/{tableId}/stream":{"patch":{"summary":"Import records into an existing table with SSE progress","description":"Append records from a file into an existing table and stream realtime import progress for each committed row batch.\n\nRequired token scopes: `table|import`","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":"SSE stream with import progress events and the imported row count"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/import/%7BbaseId%7D/%7BtableId%7D/stream \\\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/stream';\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/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 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/stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/export/{tableId}":{"get":{"description":"export csv from table\n\nRequired token scopes: `table|export`","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. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view."},"required":false,"description":"Set the view you want to fetch. When provided, records will follow that view's filter and sort settings. When omitted, the API queries the table without applying a view.","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/entry-map":{"get":{"description":"Resolve the entry URL of the current user's pinned projects and tables, so pin clicks can navigate straight to the final URL\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["pin"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Returns a map of pinned resource id to entry URL pathname.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"}}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/pin/entry-map"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/entry-map';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/entry-map',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/pin/entry-map\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin":{"delete":{"description":"Delete pin\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["pin"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine","chat"]},"required":true,"name":"type","in":"query"},{"schema":{"type":"string"},"required":true,"name":"id","in":"query"}],"responses":{"200":{"description":"Delete pin successfully"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/":{"post":{"description":"Add pin\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["pin"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine","chat"]},"id":{"type":"string"}},"required":["type","id"]}}}},"responses":{"201":{"description":"Add pin successfully"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/pin/ \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["pin"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"anyOf":[{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine","chat"]},{"type":"array","items":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine","chat"]}}]},"required":false,"name":"type","in":"query"}],"responses":{"200":{"description":"Get pin list, include project pin","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine","chat"]},"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"]},"chatMeta":{"type":"object","properties":{"type":{"type":"string"},"resourceId":{"type":"string"},"lastModifiedTime":{"type":"string"},"state":{"type":"string"},"unread":{"type":"boolean"}},"required":["type"]}},"required":["id","type","order","name"]}}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/pin/list?type=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/list?type=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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?type=SOME_STRING_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/pin/list?type=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/order":{"put":{"description":"Update pin order\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["pin"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine","chat"]},"anchorId":{"type":"string"},"anchorType":{"type":"string","enum":["space","Space","base","Base","table","Table","view","View","dashboard","Dashboard","workflow","Workflow","app","App","routine","Routine","chat"]},"position":{"type":"string","enum":["before","after"]}},"required":["id","type","anchorId","anchorType","position"]}}}},"responses":{"200":{"description":"Update pin order successfully"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/pin/order \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nRequired token scopes: `space|read`","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]}]},"fixedSeatQuantity":{"type":"number"},"fixedSeatUsage":{"type":"number"}},"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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["billing"],"security":[{"cookieAuth":[]}],"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]}]},"fixedSeatQuantity":{"type":"number"},"fixedSeatUsage":{"type":"number"}},"required":["spaceId","status","level"]}}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/summary"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/summary';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/billing/subscription/summary\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/usage":{"get":{"description":"Get usage information for the space\n\nRequired token scopes: `space|read`","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"},"maxTrashReadDays":{"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"},"archiveEnable":{"type":"boolean"},"githubSyncEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"appHideBadgeEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumSystemSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxTrashReadDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","archiveEnable","githubSyncEnable","appEnable","appHideBadgeEnable","customDomainEnable","maxNumSystemSendEmail"]},"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"},"maxTrashReadDays":{"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"},"archiveEnable":{"type":"boolean"},"githubSyncEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"appHideBadgeEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumSystemSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxTrashReadDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","archiveEnable","githubSyncEnable","appEnable","appHideBadgeEnable","customDomainEnable","maxNumSystemSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]},"seats":{"type":"number"},"seatLimit":{"type":"number"}},"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 project\n\nRequired token scopes: `base|read`","tags":["usage"],"x-mint":{"metadata":{"title":"Get project usage","sidebarTitle":"Get project usage","description":"Get usage information for the project"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns usage information for the project.","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"},"maxTrashReadDays":{"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"},"archiveEnable":{"type":"boolean"},"githubSyncEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"appHideBadgeEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumSystemSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxTrashReadDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","archiveEnable","githubSyncEnable","appEnable","appHideBadgeEnable","customDomainEnable","maxNumSystemSendEmail"]},"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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"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"}},"allowDeviceFlow":{"type":"boolean"}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/oauth/client/%7BclientId%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete an OAuth application\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"OAuth application deleted"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/oauth/client/%7BclientId%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update an OAuth application\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"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"}},"allowDeviceFlow":{"type":"boolean"}},"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"}},"allowDeviceFlow":{"type":"boolean"}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\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\"],\"allowDeviceFlow\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {\n method: 'PUT',\n headers: {'content-type': 'application/json'},\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\"],\"allowDeviceFlow\":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/oauth/client/%7BclientId%7D',\n headers: {\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 allowDeviceFlow: true\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\\\"],\\\"allowDeviceFlow\\\":true}\"\n\nheaders = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"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":["app|create","app|delete","app|read","app|update","base|create","base|delete","base|read","base|read_all","base|update","base|table_import","base|table_export","base|query_data","base|authority_matrix_config","table|create","table|delete","table|export","table|import","table|read","table|update","table|trash_read","table|trash_update","table|trash_reset","table|archive_read","table|archive_manage","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","record|archive","automation|create","automation|delete","automation|read","automation|update","routine|create","routine|delete","routine|read","routine|update","user|email_read","user|integrations"]}},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"minItems":1},"allowDeviceFlow":{"type":"boolean"}},"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"}},"allowDeviceFlow":{"type":"boolean"}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"homepage\":\"http://example.com\",\"logo\":\"string\",\"scopes\":[\"app|create\"],\"redirectUris\":[\"http://example.com\"],\"allowDeviceFlow\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"name\":\"string\",\"description\":\"string\",\"homepage\":\"http://example.com\",\"logo\":\"string\",\"scopes\":[\"app|create\"],\"redirectUris\":[\"http://example.com\"],\"allowDeviceFlow\":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/oauth/client',\n headers: {\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: ['app|create'],\n redirectUris: ['http://example.com'],\n allowDeviceFlow: true\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\\\":[\\\"app|create\\\"],\\\"redirectUris\\\":[\\\"http://example.com\\\"],\\\"allowDeviceFlow\\\":true}\"\n\nheaders = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/client"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/oauth/client\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/revoke-token":{"post":{"tags":["oauth"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"Revoke token successfully"}},"x-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token.","x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-token"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-token';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/revoke-token\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/secret/{secretId}":{"delete":{"description":"Delete the OAuth secret\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"secretId","in":"path"}],"responses":{"200":{"description":"OAuth secret deleted"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/secret":{"post":{"description":"Generate a new OAuth secret\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/secret\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/decision/{transactionId}":{"get":{"description":"Get the OAuth application\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/decision/%7BtransactionId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/decision/%7BtransactionId%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/oauth/decision/%7BtransactionId%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/device/{userCode}":{"get":{"description":"Get the application waiting on a device user code\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userCode","in":"path"}],"responses":{"200":{"description":"Returns the application requesting authorization","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","scopes"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/device/%7BuserCode%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/device/%7BuserCode%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/device/%7BuserCode%7D',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/oauth/device/%7BuserCode%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/device/decision":{"post":{"description":"Approve or deny a device authorization request\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userCode":{"type":"string"},"approve":{"type":"boolean"}},"required":["userCode","approve"]}}}},"responses":{"201":{"description":"Decision recorded"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/device/decision \\\n --header 'content-type: application/json' \\\n --data '{\"userCode\":\"string\",\"approve\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/device/decision';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"userCode\":\"string\",\"approve\":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/oauth/device/decision',\n headers: {\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({userCode: 'string', approve: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userCode\\\":\\\"string\\\",\\\"approve\\\":true}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/oauth/device/decision\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/revoke-access":{"post":{"tags":["oauth"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"201":{"description":"Revoke access permission successfully"}},"x-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token.","x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-access"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-access';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/revoke-access\")\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["oauth"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/client/authorized/list"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/authorized/list';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/oauth/client/authorized/list\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/archive":{"post":{"summary":"Archive records","description":"Move records out of the table into the archive. Archived records are read-only and can be restored from the archive.\n\nRequired token scopes: `record|archive`","tags":["archive"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1000}},"required":["recordIds"]}}}},"responses":{"201":{"description":"Archived successfully","content":{"application/json":{"schema":{"type":"object","properties":{"archivedRecordIds":{"type":"array","items":{"type":"string"}}},"required":["archivedRecordIds"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/archive \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/archive';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"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: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/archive',\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({recordIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/archive\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/archive-stream":{"post":{"summary":"Archive records with SSE progress","tags":["archive"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["recordIds"]}}}},"responses":{"200":{"description":"SSE stream with archive progress events and final result"}},"description":"Required token scopes: `record|archive`","x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/archive-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/archive-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"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: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/archive-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({recordIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/archive-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/archive/export-stream":{"post":{"summary":"Export archived records as CSV with SSE progress","tags":["archive"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordCreatedBy":{"type":"array","items":{"type":"string"}},"recordLastModifiedBy":{"type":"array","items":{"type":"string"}},"archivedTimeStart":{"type":"string"},"archivedTimeEnd":{"type":"string"},"recordCreatedTimeStart":{"type":"string"},"recordCreatedTimeEnd":{"type":"string"}}}}}},"responses":{"200":{"description":"SSE stream with export progress events and a final download url"}},"description":"Required token scopes: `table|archive_read`, `table|export`","x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/archive/export-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordCreatedBy\":[\"string\"],\"recordLastModifiedBy\":[\"string\"],\"archivedTimeStart\":\"string\",\"archivedTimeEnd\":\"string\",\"recordCreatedTimeStart\":\"string\",\"recordCreatedTimeEnd\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/archive/export-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"recordCreatedBy\":[\"string\"],\"recordLastModifiedBy\":[\"string\"],\"archivedTimeStart\":\"string\",\"archivedTimeEnd\":\"string\",\"recordCreatedTimeStart\":\"string\",\"recordCreatedTimeEnd\":\"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/archive/export-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 recordCreatedBy: ['string'],\n recordLastModifiedBy: ['string'],\n archivedTimeStart: 'string',\n archivedTimeEnd: 'string',\n recordCreatedTimeStart: 'string',\n recordCreatedTimeEnd: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordCreatedBy\\\":[\\\"string\\\"],\\\"recordLastModifiedBy\\\":[\\\"string\\\"],\\\"archivedTimeStart\\\":\\\"string\\\",\\\"archivedTimeEnd\\\":\\\"string\\\",\\\"recordCreatedTimeStart\\\":\\\"string\\\",\\\"recordCreatedTimeEnd\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/archive/export-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/archive/items":{"get":{"summary":"Get archived records","description":"List archived records of a table with fixed-dimension filters (archived time, record created time/by, record last modified by) and cursor pagination.\n\nRequired token scopes: `table|archive_read`","tags":["archive"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string","enum":["archivedTime","recordCreatedTime","recordLastModifiedTime"]},"required":false,"name":"orderBy","in":"query"},{"schema":{"type":"string","enum":["desc"]},"required":false,"name":"direction","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"recordCreatedBy","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"recordLastModifiedBy","in":"query"},{"schema":{"type":"string"},"required":false,"name":"archivedTimeStart","in":"query"},{"schema":{"type":"string"},"required":false,"name":"archivedTimeEnd","in":"query"},{"schema":{"type":"string"},"required":false,"name":"recordCreatedTimeStart","in":"query"},{"schema":{"type":"string"},"required":false,"name":"recordCreatedTimeEnd","in":"query"}],"responses":{"200":{"description":"Get archived records successfully","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"recordId":{"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"]},"archivedTime":{"type":"string"},"archivedBy":{"type":"string"},"recordCreatedTime":{"type":"string","nullable":true},"recordCreatedBy":{"type":"string","nullable":true},"recordLastModifiedTime":{"type":"string","nullable":true},"recordLastModifiedBy":{"type":"string","nullable":true}},"required":["id","recordId","record","archivedTime","archivedBy"]}},"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":["items","userMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/archive/items?cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&orderBy=SOME_STRING_VALUE&direction=SOME_STRING_VALUE&recordCreatedBy=SOME_ARRAY_VALUE&recordLastModifiedBy=SOME_ARRAY_VALUE&archivedTimeStart=SOME_STRING_VALUE&archivedTimeEnd=SOME_STRING_VALUE&recordCreatedTimeStart=SOME_STRING_VALUE&recordCreatedTimeEnd=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/archive/items?cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&orderBy=SOME_STRING_VALUE&direction=SOME_STRING_VALUE&recordCreatedBy=SOME_ARRAY_VALUE&recordLastModifiedBy=SOME_ARRAY_VALUE&archivedTimeStart=SOME_STRING_VALUE&archivedTimeEnd=SOME_STRING_VALUE&recordCreatedTimeStart=SOME_STRING_VALUE&recordCreatedTimeEnd=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/archive/items?cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&orderBy=SOME_STRING_VALUE&direction=SOME_STRING_VALUE&recordCreatedBy=SOME_ARRAY_VALUE&recordLastModifiedBy=SOME_ARRAY_VALUE&archivedTimeStart=SOME_STRING_VALUE&archivedTimeEnd=SOME_STRING_VALUE&recordCreatedTimeStart=SOME_STRING_VALUE&recordCreatedTimeEnd=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/archive/items?cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&orderBy=SOME_STRING_VALUE&direction=SOME_STRING_VALUE&recordCreatedBy=SOME_ARRAY_VALUE&recordLastModifiedBy=SOME_ARRAY_VALUE&archivedTimeStart=SOME_STRING_VALUE&archivedTimeEnd=SOME_STRING_VALUE&recordCreatedTimeStart=SOME_STRING_VALUE&recordCreatedTimeEnd=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Permanently delete archived records","description":"Permanently delete archive snapshots. This cannot be undone.\n\nRequired token scopes: `table|archive_manage`","tags":["archive"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1000}},"required":["recordIds"]}}}},"responses":{"200":{"description":"Permanently deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/archive/items \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/archive/items';\nconst options = {\n method: 'DELETE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"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: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/archive/items',\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({recordIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/archive/items\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/archive/restore":{"post":{"summary":"Restore archived records","description":"Rebuild archived records back into the table from their archive snapshots.\n\nRequired token scopes: `table|archive_manage`","tags":["archive"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1000}},"required":["recordIds"]}}}},"responses":{"201":{"description":"Restored successfully","content":{"application/json":{"schema":{"type":"object","properties":{"restoredRecordIds":{"type":"array","items":{"type":"string"}}},"required":["restoredRecordIds"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/archive/restore \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/archive/restore';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"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: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/archive/restore',\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({recordIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/archive/restore\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/archive/reset":{"delete":{"summary":"Clear table archive","description":"Permanently delete all archive snapshots of the table. This cannot be undone.\n\nRequired token scopes: `table|archive_manage`","tags":["archive"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Archive cleared successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/archive/reset \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/archive/reset';\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/archive/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(\"DELETE\", \"/api/table/%7BtableId%7D/archive/reset\", 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\n\nRequired token scopes: `table|read`","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"},"errorCode":{"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\n\nRequired token scopes: `table|read`","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"},"errorCode":{"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\"))"}]}},"/table/{tableId}/undo-redo/undo-stream":{"post":{"description":"Undo the last operation with SSE progress\n\nRequired token scopes: `table|read`","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"SSE stream with undo progress events and final status"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/undo-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/undo-stream';\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-stream',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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-stream\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/undo-redo/redo-stream":{"post":{"description":"Redo the last operation with SSE progress\n\nRequired token scopes: `table|read`","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"SSE stream with redo progress events and final status"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/redo-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/redo-stream';\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-stream',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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-stream\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/{commentId}/reaction":{"patch":{"description":"create record comment reaction\n\nRequired token scopes: `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":{"reaction":{"type":"string"}},"required":["reaction"]}}}},"responses":{"201":{"description":"Successfully create comment reaction."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\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: 'PATCH',\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: 'PATCH',\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(\"PATCH\", \"/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\n\nRequired token scopes: `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":{"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\n\nRequired token scopes: `record|read`","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":"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\n\nRequired token scopes: `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\n\nRequired token scopes: `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\n\nRequired token scopes: `record|read`","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\n\nRequired token scopes: `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\n\nRequired token scopes: `record|read`","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\n\nRequired token scopes: `record|read`","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\n\nRequired token scopes: `record|read`","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\n\nRequired token scopes: `record|read`","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":"path","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":{"post":{"description":"Get comment counts for loaded records\n\nRequired token scopes: `record|read`","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"maxItems":1000}},"required":["recordIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Returns the comment counts for the requested records","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 POST \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/count \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/count';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"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: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/count',\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({recordIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/count\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/count":{"get":{"description":"Get record comment count\n\nRequired token scopes: `record|read`","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 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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["organization"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/me"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/me';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/organization/me\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/department":{"get":{"tags":["organization"],"security":[{"cookieAuth":[]}],"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-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token.","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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/department-user":{"get":{"tags":["organization"],"security":[{"cookieAuth":[]}],"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-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token.","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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/api/{baseId}/ai/generate-stream":{"post":{"description":"Generate ai stream\n\nRequired token scopes: `base|read`","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"},"reasoningEffort":{"type":"string","enum":["none","low","medium","high"],"description":"Reasoning effort forwarded to the provider. 'none' suppresses hidden thinking tokens entirely — for latency-critical structured output, thinking time is time-to-first-token."}},"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\",\"reasoningEffort\":\"none\"}'"},{"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\",\"reasoningEffort\":\"none\"}'\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({\n prompt: 'string',\n task: 'coding',\n modelKey: 'openai@gpt-4o@custom-name',\n reasoningEffort: 'none'\n}));\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\\\",\\\"reasoningEffort\\\":\\\"none\\\"}\"\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\n\nRequired token scopes: `base|read`","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":{"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"},"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"referenceModel":{"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]}},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","nullable":true,"properties":{"xl":{"type":"string"},"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"}}},"hiddenTiers":{"type":"array","items":{"type":"string","enum":["xl","lg","md","sm"]}},"defaultTier":{"type":"string","enum":["xl","lg","md","sm"]},"tags":{"type":"array","items":{"type":"string","minLength":1}}}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}},"disableModelSelection":{"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"},"inputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"outputTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheReadTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}},"inputCacheWriteTiers":{"type":"array","items":{"type":"object","properties":{"cost":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}},"required":["cost","min"]}}}},"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","interfaze","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","prodia","quiverai","recraft","sakana","stealth","spacexai","stepfun","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","minLength":1}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"},"i18nDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}},"recommended":{"type":"boolean"},"recommendedDescription":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"}}}},"required":["id","label"]}},"attachmentTransferMode":{"type":"string","nullable":true,"enum":["url","base64"]},"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"]}]}}},"required":["llmProviders"]}}}}},"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\n\nRequired token scopes: `base|read`","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 project\n\nRequired token scopes: `base|update`","tags":["integrity"],"x-mint":{"metadata":{"title":"Get integrityproject link check","sidebarTitle":"Get integrityproject link check","description":"Check integrity of link fields in a project"}},"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 project","content":{"application/json":{"schema":{"type":"object","properties":{"hasIssues":{"type":"boolean"},"linkFieldIssues":{"type":"array","items":{"type":"object","properties":{"baseId":{"type":"string","description":"The project id of the link field with is cross-project"},"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","InvalidFilterOperator","InvalidPrimaryLookup","InvalidPrimaryType","MissingPrimary"]},"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":{"post":{"description":"Fix integrity of link fields in a project\n\nRequired token scopes: `base|update`","tags":["integrity"],"x-mint":{"metadata":{"title":"Post integrityproject link fix","sidebarTitle":"Post integrityproject link fix","description":"Fix integrity of link fields in a project"}},"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","InvalidFilterOperator","InvalidPrimaryLookup","InvalidPrimaryType","MissingPrimary"]},"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=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-fix?tableId=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/integrity/base/%7BbaseId%7D/link-fix?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(\"POST\", \"/api/integrity/base/%7BbaseId%7D/link-fix?tableId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/v2/integrity/base/{baseId}/decision":{"get":{"description":"Resolve whether the current project should use the v2 schema integrity flow\n\nRequired token scopes: `base|read`","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the v2 schema integrity decision for the project","content":{"application/json":{"schema":{"type":"object","properties":{"feature":{"type":"string","enum":["schemaIntegrity"]},"useV2":{"type":"boolean"},"reason":{"type":"string"}},"required":["feature","useV2","reason"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/v2/integrity/base/%7BbaseId%7D/decision \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/v2/integrity/base/%7BbaseId%7D/decision';\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/v2/integrity/base/%7BbaseId%7D/decision',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/v2/integrity/base/%7BbaseId%7D/decision\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/v2/integrity/table/{tableId}/check-stream":{"get":{"description":"Stream v2 schema integrity check results for a table\n\nRequired token scopes: `table|read`","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"required":false,"name":"statuses","in":"query"}],"responses":{"200":{"description":"SSE stream with schema integrity check results"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/v2/integrity/table/%7BtableId%7D/check-stream?statuses=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/v2/integrity/table/%7BtableId%7D/check-stream?statuses=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/v2/integrity/table/%7BtableId%7D/check-stream?statuses=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/v2/integrity/table/%7BtableId%7D/check-stream?statuses=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/v2/integrity/base/{baseId}/check-stream":{"get":{"description":"Stream v2 schema integrity check results for a project\n\nRequired token scopes: `base|read`","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"required":false,"name":"statuses","in":"query"}],"responses":{"200":{"description":"SSE stream with project-level schema integrity check results"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/v2/integrity/base/%7BbaseId%7D/check-stream?statuses=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/v2/integrity/base/%7BbaseId%7D/check-stream?statuses=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/v2/integrity/base/%7BbaseId%7D/check-stream?statuses=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/v2/integrity/base/%7BbaseId%7D/check-stream?statuses=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/v2/integrity/table/{tableId}/repair-stream":{"post":{"description":"Stream v2 schema integrity repair results for a table\n\nRequired token scopes: `table|update`","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fieldId":{"type":"string"},"ruleId":{"type":"string"},"dryRun":{"type":"boolean"},"statuses":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"targetStatuses":{"type":"array","items":{"type":"string","enum":["warn","error"]}},"manualRepairValues":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"boolean"}]}}}}}}},"responses":{"200":{"description":"SSE stream with schema integrity repair results"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/v2/integrity/table/%7BtableId%7D/repair-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fieldId\":\"string\",\"ruleId\":\"string\",\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"],\"manualRepairValues\":{\"property1\":\"string\",\"property2\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/v2/integrity/table/%7BtableId%7D/repair-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fieldId\":\"string\",\"ruleId\":\"string\",\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"],\"manualRepairValues\":{\"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/v2/integrity/table/%7BtableId%7D/repair-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 fieldId: 'string',\n ruleId: 'string',\n dryRun: true,\n statuses: ['success'],\n targetStatuses: ['warn'],\n manualRepairValues: {property1: 'string', property2: 'string'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fieldId\\\":\\\"string\\\",\\\"ruleId\\\":\\\"string\\\",\\\"dryRun\\\":true,\\\"statuses\\\":[\\\"success\\\"],\\\"targetStatuses\\\":[\\\"warn\\\"],\\\"manualRepairValues\\\":{\\\"property1\\\":\\\"string\\\",\\\"property2\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/v2/integrity/table/%7BtableId%7D/repair-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/v2/integrity/base/{baseId}/repair-stream":{"post":{"description":"Stream v2 schema integrity repair results for a project\n\nRequired token scopes: `base|update`","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean"},"statuses":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"targetStatuses":{"type":"array","items":{"type":"string","enum":["warn","error"]}}}}}}},"responses":{"200":{"description":"SSE stream with project-level schema integrity repair results"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/v2/integrity/base/%7BbaseId%7D/repair-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/v2/integrity/base/%7BbaseId%7D/repair-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"]}'\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/v2/integrity/base/%7BbaseId%7D/repair-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({dryRun: true, statuses: ['success'], targetStatuses: ['warn']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"dryRun\\\":true,\\\"statuses\\\":[\\\"success\\\"],\\\"targetStatuses\\\":[\\\"warn\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/v2/integrity/base/%7BbaseId%7D/repair-stream\", payload, 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\n\nRequired token scopes: `table|read`","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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|read`","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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|read`","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":"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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|update`","summary":"Duplicate 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":"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\n\nRequired token scopes: `table|update`","summary":"Duplicate a dashboard installed plugin","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":"installedId","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"]}}}}},"description":"Required token scopes: `table|read`","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\n\nRequired token scopes: `table|update`","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\n\nRequired token scopes: `table|update`","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."}},"description":"Required token scopes: `table|update`","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\n\nRequired token scopes: `table|update`","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"]}}}}},"description":"Required token scopes: `table|update`","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"]}}}}}},"description":"Required token scopes: `table|read`","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"]}}}}},"description":"Required token scopes: `table|read`","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":[],"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","apiSendEmailAction"]},"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/%7Btoken%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/unsubscribe/%7Btoken%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Update subscription status","tags":["unsubscribe"],"security":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nRequired token scopes: `base|update`","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":{"oneOf":[{"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"]},{"type":"object","properties":{"type":{"type":"string","enum":["apiSendEmailAction"]}},"required":["type"]}]}},"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\n\nRequired token scopes: `base|update`","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\n\nRequired token scopes: `base|update`","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":"Retrieve a node in a project by its ID.\n\nRequired token scopes: `base|read`","tags":["base node"],"x-mint":{"metadata":{"title":"Get project node","sidebarTitle":"Get project node","description":"Retrieve a node in a project by its ID."}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true},"loginAppId":{"type":"string"},"loginApps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"emailFieldId":{"type":"string"}},"required":["id","name"]}}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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":["routine"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"status":{"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 in a project by its ID.\n\nRequired token scopes: `base|read`","tags":["base node"],"x-mint":{"metadata":{"title":"Update project node","sidebarTitle":"Update project node","description":"Update a node in a project by its ID."}},"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","nullable":true}}}}}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true},"loginAppId":{"type":"string"},"loginApps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"emailFieldId":{"type":"string"}},"required":["id","name"]}}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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":["routine"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"status":{"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 from a project by its ID.\n\nRequired token scopes: `base|read`","tags":["base node"],"x-mint":{"metadata":{"title":"Delete project node","sidebarTitle":"Delete project node","description":"Delete a node from a project by its ID."}},"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":"Retrieve the node hierarchy and maximum folder depth for a project.\n\nRequired token scopes: `base|read`","tags":["base node"],"x-mint":{"metadata":{"title":"Get project node tree","sidebarTitle":"Get project node tree","description":"Retrieve the node hierarchy and maximum folder depth for a project."}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true},"loginAppId":{"type":"string"},"loginApps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"emailFieldId":{"type":"string"}},"required":["id","name"]}}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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":["routine"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"status":{"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":"Retrieve a flat list of nodes in a project.\n\nRequired token scopes: `base|read`","tags":["base node"],"x-mint":{"metadata":{"title":"List project nodes","sidebarTitle":"List project nodes","description":"Retrieve a flat list of nodes in a project."}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true},"loginAppId":{"type":"string"},"loginApps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"emailFieldId":{"type":"string"}},"required":["id","name"]}}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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":["routine"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"status":{"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 within a project hierarchy.\n\nRequired token scopes: `base|update`","tags":["base node"],"x-mint":{"metadata":{"title":"Move project node","sidebarTitle":"Move project node","description":"Move or reorder a node within a project hierarchy."}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true},"loginAppId":{"type":"string"},"loginApps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"emailFieldId":{"type":"string"}},"required":["id","name"]}}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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":["routine"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"status":{"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 in a project hierarchy.\n\nRequired token scopes: `base|update`","tags":["base node"],"x-mint":{"metadata":{"title":"Create project folder","sidebarTitle":"Create project folder","description":"Create a folder in a project hierarchy."}},"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 node in a project hierarchy.\n\nRequired token scopes: `base|read`","tags":["base node"],"x-mint":{"metadata":{"title":"Create project node","sidebarTitle":"Create project node","description":"Create a node in a project hierarchy."}},"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 project."},"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","nullable":true,"description":"Whether this field is not unique."},"notNull":{"type":"boolean","nullable":true,"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","nullable":true,"description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","nullable":true,"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values while preserving their type and first occurrence."},"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":{"isUnique":{"type":"boolean","description":"Remove duplicate lookup values after filtering, sorting, and limiting records."},"baseId":{"type":"string","description":"the project id of the table that this field is linked to, only required for cross project 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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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":{"showAs":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["markdown"]}},"required":["type"]},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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 project id of the table that this field is linked to, only required for cross project 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, the primary field is always visible even if omitted from this list"},"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 email or phone in string field with a button to perform the corresponding action, send an email or start a phone call. \"url\" is deprecated: URLs inside text values are detected and rendered as links automatically"}},"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+)?:\\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+)?:\\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"},"viewId":{"type":"string","description":"The id of the current view where the field is being created. Used to prevent auto-hiding the new field in this view."},"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 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":{"requireLogin":{"type":"boolean"}}},"allowEdit":{"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, no records will be created."},"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"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["routine"]},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true},"loginAppId":{"type":"string"},"loginApps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"emailFieldId":{"type":"string"}},"required":["id","name"]}}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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":["routine"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"status":{"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":"Create a copy of a node in a project.\n\nRequired token scopes: `base|read`","tags":["base node"],"x-mint":{"metadata":{"title":"Duplicate project node","sidebarTitle":"Duplicate project node","description":"Create a copy of a node in a project."}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true},"loginAppId":{"type":"string"},"loginApps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"emailFieldId":{"type":"string"}},"required":["id","name"]}}},"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"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":["routine"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"createdByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"createdTime":{"type":"string","nullable":true},"lastModifiedByUser":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]},"lastModifiedTime":{"type":"string","nullable":true},"status":{"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":"Permanently delete a node from a project by its ID.\n\nRequired token scopes: `base|read`","tags":["base node"],"x-mint":{"metadata":{"title":"Permanently delete project node","sidebarTitle":"Permanently delete project node","description":"Permanently delete a node from a project by its ID."}},"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 folder in a project.\n\nRequired token scopes: `base|update`","tags":["base node"],"x-mint":{"metadata":{"title":"Rename project folder","sidebarTitle":"Rename project folder","description":"Rename a folder in a project."}},"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 folder from a project and move its children to the parent.\n\nRequired token scopes: `base|update`","tags":["base node"],"x-mint":{"metadata":{"title":"Delete project folder","sidebarTitle":"Delete project folder","description":"Delete a folder from a project and move its children to the parent."}},"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 project share link.\n\nRequired token scopes: `base|update`","tags":["base-share"],"x-mint":{"metadata":{"title":"Create project share link","sidebarTitle":"Create project share link","description":"Create a project share link."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"nodeId":{"type":"string"}}}}}},"responses":{"201":{"description":"Returns the created project share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string","nullable":true},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"allowEdit":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","allowEdit","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\"}'"},{"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\"}'\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'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"nodeId\\\":\\\"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":"List the IDs of shared nodes in a project.\n\nRequired token scopes: `base|read`","tags":["base-share"],"x-mint":{"metadata":{"title":"List shared project node IDs","sidebarTitle":"List shared project node IDs","description":"List the IDs of shared nodes in a project."}},"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","nullable":true}},"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 the settings of a project share link.\n\nRequired token scopes: `base|update`","tags":["base-share"],"x-mint":{"metadata":{"title":"Update project share link","sidebarTitle":"Update project share link","description":"Update the settings of a project share link."}},"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},"allowEdit":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"},"password":{"type":"string","nullable":true,"minLength":3}}}}}},"responses":{"200":{"description":"Returns the updated project share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string","nullable":true},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"allowEdit":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","allowEdit","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,\"allowEdit\":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,\"allowEdit\":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({\n allowSave: true,\n allowCopy: true,\n allowEdit: true,\n enabled: true,\n password: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"allowSave\\\":true,\\\"allowCopy\\\":true,\\\"allowEdit\\\":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 project share link by its ID.\n\nRequired token scopes: `base|update`","tags":["base-share"],"x-mint":{"metadata":{"title":"Delete project share link","sidebarTitle":"Delete project share link","description":"Delete a project share link by its ID."}},"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":"Generate a new ID for a project share link.\n\nRequired token scopes: `base|update`","tags":["base-share"],"x-mint":{"metadata":{"title":"Refresh project share link","sidebarTitle":"Refresh project share link","description":"Generate a new ID for a project share link."}},"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 project share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string","nullable":true},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"allowEdit":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","allowEdit","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":"Retrieve shared project information using a share link ID.","tags":["base-share"],"x-mint":{"metadata":{"title":"Get shared project","sidebarTitle":"Get shared project","description":"Retrieve shared project information using a share link ID."}},"security":[],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the shared project information","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareMeta":{"type":"object","properties":{"password":{"type":"boolean"},"nodeId":{"type":"string","nullable":true},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"allowEdit":{"type":"boolean","nullable":true}},"required":["password","nodeId","allowSave","allowCopy","allowEdit"]},"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/base\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share/node/{nodeId}":{"get":{"description":"Retrieve the share link settings for a node in a project.\n\nRequired token scopes: `base|read`","tags":["base-share"],"x-mint":{"metadata":{"title":"Get project share by node","sidebarTitle":"Get project share by node","description":"Retrieve the share link settings for a node in a project."}},"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 project share for the specified node","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string","nullable":true},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"allowEdit":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","allowEdit","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 a password to access a shared project.","tags":["base-share"],"x-mint":{"metadata":{"title":"Authenticate shared project","sidebarTitle":"Authenticate shared project","description":"Authenticate with a password to access a shared project."}},"security":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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 project to the target space.\n\nRequired token scopes: `base|create`","tags":["base-share"],"x-mint":{"metadata":{"title":"Copy shared project","sidebarTitle":"Copy shared project","description":"Copy a shared project to the target space."}},"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 project to"},"name":{"type":"string","description":"The name of the copied project"},"withRecords":{"type":"boolean","default":true,"description":"Whether to copy records"},"baseId":{"type":"string","description":"The target project ID to copy into. If provided, tables will be added to the existing project instead of creating a new one."}},"required":["spaceId"]}}}},"responses":{"200":{"description":"Returns the copied project","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\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["slack","gmail","outlook","airtable","googleSheet"],"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","gmail","outlook","airtable","googleSheet"]},"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"]},{"type":"object","properties":{"userInfo":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email","name"]}},"required":["userInfo"]},{"type":"object","properties":{"userInfo":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"}},"required":["email","name"]}},"required":["userInfo"]},{"type":"object","properties":{"userInfo":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["userInfo"]}]}},"required":["id","userId","provider","name","createdTime","hasSecret"]}}},"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\n\nRequired token scopes: `user|integrations`","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\n\nRequired token scopes: `user|integrations`","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\"))"}]}},"/user-integrations/{integrationId}/token":{"post":{"description":"Get a valid access token for a user integration (auto-refreshes if expired)\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"responses":{"200":{"description":"Returns the access token","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"}},"required":["accessToken"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-integrations/%7BintegrationId%7D/token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/%7BintegrationId%7D/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/user-integrations/%7BintegrationId%7D/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/user-integrations/%7BintegrationId%7D/token\", 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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow action","sidebarTitle":"Post project workflow action","description":"Create a automation workflow action"}},"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"},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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,
for line breaks."}},"required":["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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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":{"grantId":{"type":"string"},"id":{"type":"string"},"provider":{"type":"string"}},"required":["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","description":"created time"},"lastModifiedTime":{"type":"string","description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","createdTime","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}":{"put":{"description":"update a automation workflow action\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Put project workflow action","sidebarTitle":"Put project workflow action","description":"update a automation workflow action"}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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,
for line breaks."}},"required":["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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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":{"grantId":{"type":"string"},"id":{"type":"string"},"provider":{"type":"string"}},"required":["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","description":"created time"},"lastModifiedTime":{"type":"string","description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","createdTime","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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Delete project workflow action","sidebarTitle":"Delete project workflow action","description":"delete a automation workflow action"}},"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 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/{actionId}/duplicate":{"post":{"description":"duplicate a automation workflow action\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow action duplicate","sidebarTitle":"Post project workflow action duplicate","description":"duplicate a automation workflow action"}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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,
for line breaks."}},"required":["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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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":{"grantId":{"type":"string"},"id":{"type":"string"},"provider":{"type":"string"}},"required":["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","description":"created time"},"lastModifiedTime":{"type":"string","description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","createdTime","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\n\nRequired token scopes: `automation|read`","tags":["automation"],"x-mint":{"metadata":{"title":"Get project workflow action script input","sidebarTitle":"Get project workflow action script input","description":"Get script integrations for a workflow action"}},"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":{"post":{"description":"Create a automation workflow logic\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow logic","sidebarTitle":"Post project workflow logic","description":"Create a automation workflow logic"}},"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"},"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","description":"created time"},"lastModifiedTime":{"type":"string","description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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","description":"created time"},"lastModifiedTime":{"type":"string","description":"last modified time"},"type":{"type":"string","enum":["conditionEnd","triggerEnd","repeatEnd"]}},"required":["config","id","category","createdTime","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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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}/logic/{logicId}":{"put":{"description":"update a automation workflow logic\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Put project workflow logic","sidebarTitle":"Put project workflow logic","description":"update a automation workflow logic"}},"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"}],"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","description":"created time"},"lastModifiedTime":{"type":"string","description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","createdTime","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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","formatDate"]},"description":"Pipe functions to transform the fact value"},"pipeOptions":{"type":"object","properties":{"formatDate":{"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"}},"description":"Configuration options for pipes"}}},"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","description":"created time"},"lastModifiedTime":{"type":"string","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","createdTime","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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Delete project workflow logic","sidebarTitle":"Delete project workflow logic","description":"delete a automation workflow logic"}},"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 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}/trigger":{"post":{"description":"Create a automation workflow trigger\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow trigger","sidebarTitle":"Post project workflow trigger","description":"Create a automation workflow trigger"}},"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","emailReceived"],"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}":{"put":{"description":"update a automation workflow trigger\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Put project workflow trigger","sidebarTitle":"Put project workflow trigger","description":"update a automation workflow trigger"}},"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/{triggerId}/generate-webhook-token":{"post":{"description":"Generate a new webhook token for the trigger\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow trigger generate webhook token","sidebarTitle":"Post project workflow trigger generate webhook token","description":"Generate a new webhook token for the trigger"}},"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}/trigger/{triggerId}/list-mailboxes":{"get":{"description":"List available mailbox folders for the configured email connection\n\nRequired token scopes: `automation|update`","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 listed mailbox folders","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/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/list-mailboxes \\\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/list-mailboxes';\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/list-mailboxes',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/list-mailboxes\", 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\n\nRequired token scopes: `automation|read`","tags":["automation"],"x-mint":{"metadata":{"title":"Get project workflow","sidebarTitle":"Get project workflow","description":"get a automation workflow"}},"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 project id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","nullable":true,"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"},"activeSnapshotId":{"type":"string","description":"id of the currently active snapshot"}},"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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Put project workflow","sidebarTitle":"Put project workflow","description":"update a automation workflow"}},"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","nullable":true},"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","emailReceived"],"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\n\nRequired token scopes: `automation|delete`","tags":["automation"],"x-mint":{"metadata":{"title":"Delete project workflow","sidebarTitle":"Delete project workflow","description":"delete a automation workflow"}},"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 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.\n\nRequired token scopes: `automation|read`","tags":["automation"],"x-mint":{"metadata":{"title":"Get project workflow active snapshot","sidebarTitle":"Get project workflow active snapshot","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."}},"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 project id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","nullable":true,"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"},"activeSnapshotId":{"type":"string","description":"id of the currently active snapshot"}},"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 project\n\nRequired token scopes: `automation|read`","tags":["automation"],"x-mint":{"metadata":{"title":"Get project workflow 1","sidebarTitle":"Get project workflow 1","description":"get automation workflow list in project"}},"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","nullable":true,"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\n\nRequired token scopes: `automation|create`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow","sidebarTitle":"Post project workflow","description":"Create a automation workflow"}},"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","nullable":true},"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","emailReceived"],"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 project id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","nullable":true,"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"},"activeSnapshotId":{"type":"string","description":"id of the currently active snapshot"}},"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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Put project workflow active","sidebarTitle":"Put project workflow active","description":"active or inactive a automation workflow"}},"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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Get project workflow run","sidebarTitle":"Get project workflow run","description":"get automation workflow run list"}},"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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Get project workflow run 1","sidebarTitle":"Get project workflow run 1","description":"get automation workflow run history list"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"integer","nullable":true,"minimum":0,"description":"skip number"},"required":false,"description":"skip number","name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"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"},{"schema":{"type":"string","description":"inclusive lower bound (ISO datetime)"},"required":false,"description":"inclusive lower bound (ISO datetime)","name":"createdTimeStart","in":"query"},{"schema":{"type":"string","description":"inclusive upper bound (ISO datetime)"},"required":false,"description":"inclusive upper bound (ISO datetime)","name":"createdTimeEnd","in":"query"},{"schema":{"type":"number","nullable":true,"description":"inclusive lower bound on spent (ms)"},"required":false,"description":"inclusive lower bound on spent (ms)","name":"spentMin","in":"query"},{"schema":{"type":"number","nullable":true,"description":"inclusive upper bound on spent (ms)"},"required":false,"description":"inclusive upper bound on spent (ms)","name":"spentMax","in":"query"},{"schema":{"type":"string","description":"comma-separated run IDs to filter by"},"required":false,"description":"comma-separated run IDs to filter by","name":"runIds","in":"query"},{"schema":{"type":"string","description":"opaque continuation cursor for pages beyond the hot storage zone; when set, skip is ignored. Pages served from cold storage may be slower, especially with spent/runIds filters"},"required":false,"description":"opaque continuation cursor for pages beyond the hot storage zone; when set, skip is ignored. Pages served from cold storage may be slower, especially with spent/runIds filters","name":"cursor","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number","description":"total number of the runs, deduplicated across hot and archived storage. One known exception: a run that turns terminal only after an archive pass, while sorting below the archive boundary, is omitted until the next successful archive pass picks it up."},"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"},"retryOfRunId":{"type":"string","description":"id of the original run this is a retry of"},"snapshotId":{"type":"string","description":"id of the workflow snapshot used for this run"}},"required":["id","status","createdTime"]},"description":"workflow run history"},"nextCursor":{"type":"string","nullable":true,"description":"cursor for the next page; pass it back as `cursor`. null means the list is exhausted. Present on every page — only the first request needs skip/take"}},"required":["rowCount","runs","nextCursor"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE&status=SOME_STRING_VALUE&createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&spentMin=SOME_NUMBER_VALUE&spentMax=SOME_NUMBER_VALUE&runIds=SOME_STRING_VALUE&cursor=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_INTEGER_VALUE&take=SOME_INTEGER_VALUE&status=SOME_STRING_VALUE&createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&spentMin=SOME_NUMBER_VALUE&spentMax=SOME_NUMBER_VALUE&runIds=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/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE&status=SOME_STRING_VALUE&createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&spentMin=SOME_NUMBER_VALUE&spentMax=SOME_NUMBER_VALUE&runIds=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/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE&status=SOME_STRING_VALUE&createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&spentMin=SOME_NUMBER_VALUE&spentMax=SOME_NUMBER_VALUE&runIds=SOME_STRING_VALUE&cursor=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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Get project workflow runsummary","sidebarTitle":"Get project workflow runsummary","description":"get automation workflow run summary statistics"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string","description":"inclusive lower bound (ISO datetime)"},"required":false,"description":"inclusive lower bound (ISO datetime)","name":"createdTimeStart","in":"query"},{"schema":{"type":"string","description":"inclusive upper bound (ISO datetime)"},"required":false,"description":"inclusive upper bound (ISO datetime)","name":"createdTimeEnd","in":"query"},{"schema":{"type":"number","nullable":true,"description":"inclusive lower bound on spent (ms)"},"required":false,"description":"inclusive lower bound on spent (ms)","name":"spentMin","in":"query"},{"schema":{"type":"number","nullable":true,"description":"inclusive upper bound on spent (ms)"},"required":false,"description":"inclusive upper bound on spent (ms)","name":"spentMax","in":"query"},{"schema":{"type":"string","description":"comma-separated run IDs to filter by"},"required":false,"description":"comma-separated run IDs to filter by","name":"runIds","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"totalCount":{"type":"number","description":"total number of runs, deduplicated across hot and archived storage (same late-terminal exception as the run list rowCount: such a run is missing until the next successful archive pass)"},"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, deduplicated across hot and archived storage (same late-terminal exception as totalCount)"},"avgSpent":{"type":"number","description":"average runtime in milliseconds over the deduplicated run set (same late-terminal exception as totalCount)"}},"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?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&spentMin=SOME_NUMBER_VALUE&spentMax=SOME_NUMBER_VALUE&runIds=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/summary?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&spentMin=SOME_NUMBER_VALUE&spentMax=SOME_NUMBER_VALUE&runIds=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/summary?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&spentMin=SOME_NUMBER_VALUE&spentMax=SOME_NUMBER_VALUE&runIds=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/summary?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&spentMin=SOME_NUMBER_VALUE&spentMax=SOME_NUMBER_VALUE&runIds=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/run/{runId}/rerun":{"post":{"description":"rerun a failed automation workflow run\n\nRequired token scopes: `automation|update`","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"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"resumeFromNodeId":{"type":"string","description":"Node ID to resume from. When provided, skips already-succeeded steps before this node. Omit for a full rerun."}}}}}},"responses":{"200":{"description":"Successful rerun","content":{"application/json":{"schema":{"type":"object","properties":{"newRunId":{"type":"string","description":"id of the newly created rerun"}},"required":["newRunId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D/rerun \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"resumeFromNodeId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D/rerun';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"resumeFromNodeId\":\"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/workflow/%7BworkflowId%7D/run/%7BrunId%7D/rerun',\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({resumeFromNodeId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"resumeFromNodeId\\\":\\\"string\\\"}\"\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/run/%7BrunId%7D/rerun\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/run/{runId}/rerun/plan":{"post":{"description":"Check whether a failed run supports resume-from-step rerun\n\nRequired token scopes: `automation|update`","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":"Rerun eligibility result","content":{"application/json":{"schema":{"type":"object","properties":{"canResume":{"type":"boolean"},"resumeFromNodeId":{"type":"string"},"reason":{"type":"string","enum":["workflowModified","workflowDisabled","noResumableSteps","controlDataMissing","payloadTruncated"]}},"required":["canResume"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D/rerun/plan \\\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/rerun/plan';\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/run/%7BrunId%7D/rerun/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(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D/rerun/plan\", 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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow test","sidebarTitle":"Post project workflow test","description":"test a automation workflow node"}},"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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow test all","sidebarTitle":"Post project workflow test all","description":"test a automation workflow all"}},"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\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Put project workflow order","sidebarTitle":"Put project workflow order","description":"Update workflow order"}},"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 project\n\nRequired token scopes: `automation|update`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow filter link records","sidebarTitle":"Post project workflow filter link records","description":"get automation workflow list in project"}},"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\n\nRequired token scopes: `automation|create`","tags":["automation"],"x-mint":{"metadata":{"title":"Post project workflow duplicate","sidebarTitle":"Post project workflow duplicate","description":"duplicate a automation workflow"}},"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 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.\n\nRequired token scopes: `automation|delete`","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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Patch project authority matrixstatus","sidebarTitle":"Patch project authority matrixstatus","description":"Enable authority"}},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Get project authority matrix","sidebarTitle":"Get project authority matrix","description":"Get 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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Put project authority matrix","sidebarTitle":"Put project authority matrix","description":"Update 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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Patch project authority matrixadmin user","sidebarTitle":"Patch project authority matrixadmin user","description":"Update admin user"}},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Post project authority matrix role","sidebarTitle":"Post project authority matrix role","description":"Add authority matrix role"}},"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","routine"]},"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","routine"]},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Get project authority matrix role","sidebarTitle":"Get project authority matrix role","description":"Get authority matrix role list"}},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Delete project authority matrix role","sidebarTitle":"Delete project authority matrix role","description":"Delete authority matrix role"}},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Put project authority matrix role","sidebarTitle":"Put project authority matrix role","description":"Update authority matrix role"}},"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","routine"]},"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","routine"]},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Get project authority matrix role 1","sidebarTitle":"Get project authority matrix role 1","description":"Get authority matrix role"}},"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","routine"]},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Patch project authority matrix role status","sidebarTitle":"Patch project authority matrix role status","description":"Update authority matrix role status"}},"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":{"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Patch project authority matrix role name","sidebarTitle":"Patch project authority matrix role name","description":"Update authority matrix role name"}},"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"}},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Patch project authority matrix role description","sidebarTitle":"Patch project authority matrix role description","description":"Update authority matrix role description"}},"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":{"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Patch project authority matrix role user","sidebarTitle":"Patch project authority matrix role user","description":"Update authority matrix role user"}},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Post project authority matrix role duplicate","sidebarTitle":"Post project authority matrix role duplicate","description":"Duplicate authority matrix role"}},"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\n\nRequired token scopes: `base|authority_matrix_config`","tags":["authority-matrix"],"x-mint":{"metadata":{"title":"Get project authority matrix role table filter link records","sidebarTitle":"Get project authority matrix role table filter link records","description":"Get authority matrix table link records"}},"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":[],"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"},"availableForNewSubscription":{"type":"boolean"},"creditDensities":{"type":"array","items":{"type":"object","properties":{"credits":{"type":"number"},"savePercent":{"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"]}}},"required":["credits","savePercent","prices"]}},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxTrashReadDays":{"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"},"archiveEnable":{"type":"boolean"},"githubSyncEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"appHideBadgeEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumSystemSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxTrashReadDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","archiveEnable","githubSyncEnable","appEnable","appHideBadgeEnable","customDomainEnable","maxNumSystemSendEmail"]},"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/base-products';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/billing/base-products\")\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":[],"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/add-on-products';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/billing/add-on-products\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription":{"get":{"description":"Get subscription detail by spaceId\n\nRequired token scopes: `space|update`","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"},"maxTrashReadDays":{"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"},"archiveEnable":{"type":"boolean"},"githubSyncEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"appHideBadgeEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumSystemSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxTrashReadDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","archiveEnable","githubSyncEnable","appEnable","appHideBadgeEnable","customDomainEnable","maxNumSystemSendEmail"]},"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]}]},"hasPendingSchedule":{"type":"boolean"}},"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\n\nRequired token scopes: `space|update`","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\n\nRequired token scopes: `space|update`","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"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"},"numSystemSendEmail":{"type":"number"},"numAutomationRuns":{"type":"number"}},"required":["numRows","attachmentSize","numDatabaseConnections","numCollaborators","numSystemSendEmail","numAutomationRuns"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxTrashReadDays":{"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"},"archiveEnable":{"type":"boolean"},"githubSyncEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"appHideBadgeEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumSystemSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxTrashReadDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","archiveEnable","githubSyncEnable","appEnable","appHideBadgeEnable","customDomainEnable","maxNumSystemSendEmail"]},"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]}]},"hasPendingSchedule":{"type":"boolean"}},"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},"addonCredits":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"number"},"packageAmount":{"type":"number"},"coveredAmount":{"type":"number"},"remainingAmount":{"type":"number"},"resetTime":{"type":"string"},"isActive":{"type":"boolean"}},"required":["amount","packageAmount","coveredAmount","remainingAmount","isActive"]}}},"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\n\nRequired token scopes: `space|update`","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","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"}],"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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["billing"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/license/%7BlicenseId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/%7BlicenseId%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/billing/subscription/license/%7BlicenseId%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license":{"get":{"description":"Get license list\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["billing"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/license"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/billing/subscription/license\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/manage-billing":{"post":{"description":"Manage billing\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["billing","license"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/billing/subscription/license/manage-billing \\\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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["billing","license"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Returns whether user can access manage billing portal","content":{"application/json":{"schema":{"type":"object","properties":{"canAccessPortal":{"type":"boolean"}},"required":["canAccessPortal"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/license/manage-billing/availability"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/manage-billing/availability';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/billing/subscription/license/manage-billing/availability\")\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\n\nRequired token scopes: `space|update`","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":"integer","minimum":1},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"},"isTrial":{"type":"boolean"},"clientReferenceId":{"type":"string"},"coupon":{"type":"string"},"marketingAttribution":{"type":"object","properties":{"ref":{"type":"string","maxLength":500},"utm_source":{"type":"string","maxLength":500},"utm_medium":{"type":"string","maxLength":500},"utm_campaign":{"type":"string","maxLength":500},"utm_term":{"type":"string","maxLength":500},"utm_content":{"type":"string","maxLength":500},"cta_id":{"type":"string","maxLength":500},"landing_cta_id":{"type":"string","maxLength":500},"gclid":{"type":"string","maxLength":500},"gbraid":{"type":"string","maxLength":500},"wbraid":{"type":"string","maxLength":500},"ga_client_id":{"type":"string","maxLength":500}}}},"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\":1,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"isTrial\":true,\"clientReferenceId\":\"string\",\"coupon\":\"string\",\"marketingAttribution\":{\"ref\":\"string\",\"utm_source\":\"string\",\"utm_medium\":\"string\",\"utm_campaign\":\"string\",\"utm_term\":\"string\",\"utm_content\":\"string\",\"cta_id\":\"string\",\"landing_cta_id\":\"string\",\"gclid\":\"string\",\"gbraid\":\"string\",\"wbraid\":\"string\",\"ga_client_id\":\"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\":1,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"isTrial\":true,\"clientReferenceId\":\"string\",\"coupon\":\"string\",\"marketingAttribution\":{\"ref\":\"string\",\"utm_source\":\"string\",\"utm_medium\":\"string\",\"utm_campaign\":\"string\",\"utm_term\":\"string\",\"utm_content\":\"string\",\"cta_id\":\"string\",\"landing_cta_id\":\"string\",\"gclid\":\"string\",\"gbraid\":\"string\",\"wbraid\":\"string\",\"ga_client_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/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: 1,\n successUrl: 'string',\n cancelUrl: 'string',\n isTrial: true,\n clientReferenceId: 'string',\n coupon: 'string',\n marketingAttribution: {\n ref: 'string',\n utm_source: 'string',\n utm_medium: 'string',\n utm_campaign: 'string',\n utm_term: 'string',\n utm_content: 'string',\n cta_id: 'string',\n landing_cta_id: 'string',\n gclid: 'string',\n gbraid: 'string',\n wbraid: 'string',\n ga_client_id: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"priceId\\\":\\\"string\\\",\\\"quantity\\\":1,\\\"successUrl\\\":\\\"string\\\",\\\"cancelUrl\\\":\\\"string\\\",\\\"isTrial\\\":true,\\\"clientReferenceId\\\":\\\"string\\\",\\\"coupon\\\":\\\"string\\\",\\\"marketingAttribution\\\":{\\\"ref\\\":\\\"string\\\",\\\"utm_source\\\":\\\"string\\\",\\\"utm_medium\\\":\\\"string\\\",\\\"utm_campaign\\\":\\\"string\\\",\\\"utm_term\\\":\\\"string\\\",\\\"utm_content\\\":\\\"string\\\",\\\"cta_id\\\":\\\"string\\\",\\\"landing_cta_id\\\":\\\"string\\\",\\\"gclid\\\":\\\"string\\\",\\\"gbraid\\\":\\\"string\\\",\\\"wbraid\\\":\\\"string\\\",\\\"ga_client_id\\\":\\\"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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["billing"],"security":[{"cookieAuth":[]}],"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"},"coupon":{"type":"string"},"marketingAttribution":{"type":"object","properties":{"ref":{"type":"string","maxLength":500},"utm_source":{"type":"string","maxLength":500},"utm_medium":{"type":"string","maxLength":500},"utm_campaign":{"type":"string","maxLength":500},"utm_term":{"type":"string","maxLength":500},"utm_content":{"type":"string","maxLength":500},"cta_id":{"type":"string","maxLength":500},"landing_cta_id":{"type":"string","maxLength":500},"gclid":{"type":"string","maxLength":500},"gbraid":{"type":"string","maxLength":500},"wbraid":{"type":"string","maxLength":500},"ga_client_id":{"type":"string","maxLength":500}}}},"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/billing/subscription/license/checkout \\\n --header 'content-type: application/json' \\\n --data '{\"instanceId\":\"stringstringstringstringstringstring\",\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"clientReferenceId\":\"string\",\"coupon\":\"string\",\"marketingAttribution\":{\"ref\":\"string\",\"utm_source\":\"string\",\"utm_medium\":\"string\",\"utm_campaign\":\"string\",\"utm_term\":\"string\",\"utm_content\":\"string\",\"cta_id\":\"string\",\"landing_cta_id\":\"string\",\"gclid\":\"string\",\"gbraid\":\"string\",\"wbraid\":\"string\",\"ga_client_id\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/checkout';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"instanceId\":\"stringstringstringstringstringstring\",\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"clientReferenceId\":\"string\",\"coupon\":\"string\",\"marketingAttribution\":{\"ref\":\"string\",\"utm_source\":\"string\",\"utm_medium\":\"string\",\"utm_campaign\":\"string\",\"utm_term\":\"string\",\"utm_content\":\"string\",\"cta_id\":\"string\",\"landing_cta_id\":\"string\",\"gclid\":\"string\",\"gbraid\":\"string\",\"wbraid\":\"string\",\"ga_client_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/billing/subscription/license/checkout',\n headers: {\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 coupon: 'string',\n marketingAttribution: {\n ref: 'string',\n utm_source: 'string',\n utm_medium: 'string',\n utm_campaign: 'string',\n utm_term: 'string',\n utm_content: 'string',\n cta_id: 'string',\n landing_cta_id: 'string',\n gclid: 'string',\n gbraid: 'string',\n wbraid: 'string',\n ga_client_id: 'string'\n }\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\\\",\\\"coupon\\\":\\\"string\\\",\\\"marketingAttribution\\\":{\\\"ref\\\":\\\"string\\\",\\\"utm_source\\\":\\\"string\\\",\\\"utm_medium\\\":\\\"string\\\",\\\"utm_campaign\\\":\\\"string\\\",\\\"utm_term\\\":\\\"string\\\",\\\"utm_content\\\":\\\"string\\\",\\\"cta_id\\\":\\\"string\\\",\\\"landing_cta_id\\\":\\\"string\\\",\\\"gclid\\\":\\\"string\\\",\\\"gbraid\\\":\\\"string\\\",\\\"wbraid\\\":\\\"string\\\",\\\"ga_client_id\\\":\\\"string\\\"}}\"\n\nheaders = { 'content-type': \"application/json\" }\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\n\nRequired token scopes: `space|read`","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\"))"}]}},"/space/{spaceId}/billing/subscription/scheduled-change":{"get":{"description":"Get the base-plan change scheduled for the end of the current billing period\n\nRequired token scopes: `space|update`","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the scheduled change, or null when none is pending.","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"creditsPerSeat":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"effectiveAt":{"type":"string"}},"required":["level","quantity","interval","effectiveAt"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/scheduled-change \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/scheduled-change';\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/scheduled-change',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/scheduled-change\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/period-end-change/revert":{"post":{"description":"Undo what is pending for the end of the current billing period — a scheduled plan change, a cancellation, or both — so the subscription keeps renewing as it is\n\nRequired token scopes: `space|update`","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"201":{"description":"Reverted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/period-end-change/revert \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/period-end-change/revert';\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/space/%7BspaceId%7D/billing/subscription/period-end-change/revert',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/space/%7BspaceId%7D/billing/subscription/period-end-change/revert\", 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":[],"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"},"availableForNewSubscription":{"type":"boolean"},"creditDensities":{"type":"array","items":{"type":"object","properties":{"credits":{"type":"number"},"savePercent":{"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"]}}},"required":["credits","savePercent","prices"]}},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxTrashReadDays":{"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"},"archiveEnable":{"type":"boolean"},"githubSyncEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"appHideBadgeEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumSystemSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxTrashReadDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","archiveEnable","githubSyncEnable","appEnable","appHideBadgeEnable","customDomainEnable","maxNumSystemSendEmail"]},"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/all-products';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/billing/all-products\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-summary":{"get":{"description":"Get space credit summary\n\nRequired token scopes: `space|read`","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"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 for a billing cycle (defaults to the current one)\n\nRequired token scopes: `space|update`","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"required":false,"name":"month","in":"query"}],"responses":{"200":{"description":"Returns space credit usage detail.","content":{"application/json":{"schema":{"type":"object","properties":{"month":{"type":"string"},"cycleStart":{"type":"string"},"cycleEnd":{"type":"string"},"data":{"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"},"scrape":{"type":"number"},"api_proxy":{"type":"number"},"routine":{"type":"number"}},"required":["date","automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation","scrape","api_proxy","routine"]}}},"required":["month","cycleStart","cycleEnd","data"]}}}}},"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\n\nRequired token scopes: `space|update`","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"required":false,"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","scrape","api_proxy","routine"]},"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","scrape","api_proxy","routine"]},"transactionType":{"type":"string","enum":["expense","refund"]},"refundReason":{"type":"string","nullable":true},"amount":{"type":"number"},"createdTime":{"type":"string"},"displayName":{"type":"string","nullable":true},"modelKey":{"type":"string","nullable":true},"modelId":{"type":"string","nullable":true},"isByok":{"type":"boolean","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","transactionType","refundReason","amount","createdTime","displayName","modelKey","modelId","isByok","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\n\nRequired token scopes: `space|update`","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"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\"))"}]}},"/space/{spaceId}/billing/row-count-detail":{"get":{"description":"Get per-project row count breakdown for a space\n\nRequired token scopes: `space|read`","tags":["billing","usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns per-project row count detail with trash breakdown.","content":{"application/json":{"schema":{"type":"object","properties":{"bases":{"type":"array","items":{"type":"object","properties":{"baseId":{"type":"string"},"baseName":{"type":"string"},"isBaseInTrash":{"type":"boolean"},"activeRowCount":{"type":"number"},"trashRowCount":{"type":"number"},"totalRowCount":{"type":"number"}},"required":["baseId","baseName","isBaseInTrash","activeRowCount","trashRowCount","totalRowCount"]}},"totalActiveRowCount":{"type":"number"},"totalTrashRowCount":{"type":"number"},"totalRowCount":{"type":"number"}},"required":["bases","totalActiveRowCount","totalTrashRowCount","totalRowCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/row-count-detail \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/row-count-detail';\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/row-count-detail',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/row-count-detail\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/row-count/refresh":{"post":{"description":"Recount row usage for a space and stream progress via SSE\n\nRequired token scopes: `space|update`","tags":["billing","usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"SSE stream with per-table progress and the final row count detail","content":{"text/event-stream":{"schema":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","enum":["progress"]},"completed":{"type":"number"},"total":{"type":"number"},"baseName":{"type":"string"},"tableName":{"type":"string"}},"required":["id","completed","total"]},{"type":"object","properties":{"id":{"type":"string","enum":["done"]},"detail":{"type":"object","properties":{"bases":{"type":"array","items":{"type":"object","properties":{"baseId":{"type":"string"},"baseName":{"type":"string"},"isBaseInTrash":{"type":"boolean"},"activeRowCount":{"type":"number"},"trashRowCount":{"type":"number"},"totalRowCount":{"type":"number"}},"required":["baseId","baseName","isBaseInTrash","activeRowCount","trashRowCount","totalRowCount"]}},"totalActiveRowCount":{"type":"number"},"totalTrashRowCount":{"type":"number"},"totalRowCount":{"type":"number"}},"required":["bases","totalActiveRowCount","totalTrashRowCount","totalRowCount"]},"calibratedAt":{"type":"string"},"fromCache":{"type":"boolean"}},"required":["id","detail"]},{"type":"object","properties":{"id":{"type":"string","enum":["error"]},"message":{"type":"string"}},"required":["id","message"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/row-count/refresh \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/row-count/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/space/%7BspaceId%7D/billing/row-count/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/space/%7BspaceId%7D/billing/row-count/refresh\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/attachment-size/refresh":{"post":{"description":"Recalculate the attachment storage usage for a space\n\nRequired token scopes: `space|update`","tags":["billing","usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"The refreshed attachment storage usage in bytes","content":{"application/json":{"schema":{"type":"object","properties":{"totalSize":{"type":"number"},"calibratedAt":{"type":"string"},"fromCache":{"type":"boolean"}},"required":["totalSize","calibratedAt"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/attachment-size/refresh \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/attachment-size/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/space/%7BspaceId%7D/billing/attachment-size/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/space/%7BspaceId%7D/billing/attachment-size/refresh\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/users/{userId}/activate":{"patch":{"description":"Reactivate a deactivated user\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Reactivate the user successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/users/%7BuserId%7D/activate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/users/%7BuserId%7D/activate';\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/users/%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(\"PATCH\", \"/api/admin/users/%7BuserId%7D/activate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/users/{userId}/deactivate":{"patch":{"description":"Deactivate a user\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Deactivate the user successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/users/%7BuserId%7D/deactivate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/users/%7BuserId%7D/deactivate';\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/users/%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(\"PATCH\", \"/api/admin/users/%7BuserId%7D/deactivate\", 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","minLength":1,"maxLength":100},"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}/reset-password":{"post":{"description":"Generate a one-time password reset link for the user, and email it to the user when mail is configured","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"201":{"description":"Reset link generated successfully, returns the link and its validity window.","content":{"application/json":{"schema":{"type":"object","properties":{"resetPasswordUrl":{"type":"string"},"expiresIn":{"type":"number"},"emailSent":{"type":"boolean"}},"required":["resetPasswordUrl","expiresIn","emailSent"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D/reset-password \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/reset-password';\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/reset-password',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/reset-password\", 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":{"post":{"description":"Create a space from the admin panel\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"dataDb":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"url":{"type":"string","minLength":1},"targetMode":{"type":"string","enum":["initialize-empty","migrate-space","adopt-existing"],"default":"initialize-empty"},"internalSchema":{"type":"string","pattern":"^[a-z_]\\w*$/i"},"preflightToken":{"type":"string"}},"required":["mode"]}}}}}},"responses":{"201":{"description":"Create space 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/admin/space \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"dataDb\":{\"mode\":\"default\",\"url\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"preflightToken\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"dataDb\":{\"mode\":\"default\",\"url\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"preflightToken\":\"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/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({\n name: 'string',\n dataDb: {\n mode: 'default',\n url: 'string',\n targetMode: 'initialize-empty',\n internalSchema: 'string',\n preflightToken: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"dataDb\\\":{\\\"mode\\\":\\\"default\\\",\\\"url\\\":\\\"string\\\",\\\"targetMode\\\":\\\"initialize-empty\\\",\\\"internalSchema\\\":\\\"string\\\",\\\"preflightToken\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/space\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get paginated spaces for the instance\n\nRequired token scopes: `instance|read`","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"},{"schema":{"type":"string","enum":["default","byodb"]},"required":false,"name":"dataDbMode","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},"schedulingLimits":{"type":"object","nullable":true,"properties":{"ai-field-generation":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["limit"]},"workflow-run":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":10}},"required":["limit"]},"workflow-ai-action":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":12}},"required":["limit"]},"routine-run":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":10}},"required":["limit"]}},"additionalProperties":false},"baseCount":{"type":"number"},"collaboratorCount":{"type":"number"},"ownerEmail":{"type":"string","nullable":true},"dataDb":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}},"required":["id","name","createdTime","autoJoin","schedulingLimits","baseCount","collaboratorCount","ownerEmail"]}},"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&dataDbMode=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&dataDbMode=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&dataDbMode=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&dataDbMode=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}":{"patch":{"description":"update enterprise space information\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"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\n\nRequired token scopes: `instance|update`","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/data-db/preflight":{"post":{"description":"Validate a PostgreSQL data database before binding it from the admin panel\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","minLength":1},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["initialize-empty","migrate-space","adopt-existing"],"default":"initialize-empty"},"internalSchema":{"type":"string","pattern":"^[a-z_]\\w*$/i"},"confirmLargeMigration":{"type":"boolean"},"switchOnCompletion":{"type":"boolean"}},"required":["url"]}}}},"responses":{"200":{"description":"Returns PostgreSQL data database validation details.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"provider":{"type":"string","enum":["postgres"]},"maskedUrl":{"type":"string"},"urlFingerprint":{"type":"string"},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"serverVersion":{"type":"string"},"classification":{"type":"string","enum":["empty","teable-managed-compatible","teable-managed-incompatible","non-empty-unknown"]},"availableDatabases":{"type":"array","items":{"type":"string"}},"requiresDatabaseSelection":{"type":"boolean"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"remediation":{"type":"string"}},"required":["code","message"]}}},"required":["ok","provider","classification","capabilities","errors"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/space/data-db/preflight \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"url\":\"string\",\"spaceId\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"confirmLargeMigration\":true,\"switchOnCompletion\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/data-db/preflight';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"url\":\"string\",\"spaceId\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"confirmLargeMigration\":true,\"switchOnCompletion\":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/space/data-db/preflight',\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 url: 'string',\n spaceId: 'string',\n targetMode: 'initialize-empty',\n internalSchema: 'string',\n confirmLargeMigration: true,\n switchOnCompletion: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"url\\\":\\\"string\\\",\\\"spaceId\\\":\\\"string\\\",\\\"targetMode\\\":\\\"initialize-empty\\\",\\\"internalSchema\\\":\\\"string\\\",\\\"confirmLargeMigration\\\":true,\\\"switchOnCompletion\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/space/data-db/preflight\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/data-db":{"get":{"description":"Get the data database binding summary for a space from the admin panel\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["true","false"]}]},"required":false,"name":"includeRelatedSpaces","in":"query"}],"responses":{"200":{"description":"Returns the data database binding summary for a space.","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db?includeRelatedSpaces=SOME_BOOLEAN_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db?includeRelatedSpaces=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/admin/space/%7BspaceId%7D/data-db?includeRelatedSpaces=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/admin/space/%7BspaceId%7D/data-db?includeRelatedSpaces=SOME_BOOLEAN_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Bind or update a BYODB data database for a space from the admin panel\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","minLength":1},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["initialize-empty","migrate-space","adopt-existing"],"default":"initialize-empty"},"internalSchema":{"type":"string","pattern":"^[a-z_]\\w*$/i"},"confirmLargeMigration":{"type":"boolean"},"switchOnCompletion":{"type":"boolean"}},"required":["url"]}}}},"responses":{"200":{"description":"Returns the refreshed data database binding summary.","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"url\":\"string\",\"spaceId\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"confirmLargeMigration\":true,\"switchOnCompletion\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"url\":\"string\",\"spaceId\":\"string\",\"targetMode\":\"initialize-empty\",\"internalSchema\":\"string\",\"confirmLargeMigration\":true,\"switchOnCompletion\":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/data-db',\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 url: 'string',\n spaceId: 'string',\n targetMode: 'initialize-empty',\n internalSchema: 'string',\n confirmLargeMigration: true,\n switchOnCompletion: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"url\\\":\\\"string\\\",\\\"spaceId\\\":\\\"string\\\",\\\"targetMode\\\":\\\"initialize-empty\\\",\\\"internalSchema\\\":\\\"string\\\",\\\"confirmLargeMigration\\\":true,\\\"switchOnCompletion\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/space/%7BspaceId%7D/data-db\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/data-db/retest":{"post":{"description":"Retest the existing BYODB data database binding for a space from the admin panel\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the refreshed data database binding summary.","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db/retest \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db/retest';\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/space/%7BspaceId%7D/data-db/retest',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/space/%7BspaceId%7D/data-db/retest\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/data-db/migration/{jobId}":{"get":{"description":"Get detailed data database migration status for a space from the admin panel\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Returns the migration job status without connection secrets.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["migrate-space"]},"switchOnCompletion":{"type":"boolean"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"targetConnection":{"type":"object","nullable":true,"properties":{"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]}},"required":["provider"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]},"inventory":{"nullable":true},"copyStats":{"nullable":true},"validationStats":{"nullable":true},"lastError":{"type":"string","nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["jobId","spaceId","targetMode","state","targetInternalSchema","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db/migration/%7BjobId%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/space/%7BspaceId%7D/data-db/migration/%7BjobId%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/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/data-db/migration/{jobId}/cancel":{"post":{"description":"Cancel a pre-switch data database migration from the admin panel\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Returns the canceled migration job status without connection secrets.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["migrate-space"]},"switchOnCompletion":{"type":"boolean"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"targetConnection":{"type":"object","nullable":true,"properties":{"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]}},"required":["provider"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]},"inventory":{"nullable":true},"copyStats":{"nullable":true},"validationStats":{"nullable":true},"lastError":{"type":"string","nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["jobId","spaceId","targetMode","state","targetInternalSchema","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/cancel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/cancel';\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/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/cancel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/cancel\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/data-db/migration/{jobId}/rollback":{"post":{"description":"Rollback a completed data database migration from the admin panel when safe\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Returns the rolled back migration job status without connection secrets.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string"},"spaceId":{"type":"string"},"targetMode":{"type":"string","enum":["migrate-space"]},"switchOnCompletion":{"type":"boolean"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"targetConnection":{"type":"object","nullable":true,"properties":{"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]}},"required":["provider"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]},"inventory":{"nullable":true},"copyStats":{"nullable":true},"validationStats":{"nullable":true},"lastError":{"type":"string","nullable":true},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["jobId","spaceId","targetMode","state","targetInternalSchema","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/rollback \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/rollback';\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/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/rollback',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/space/%7BspaceId%7D/data-db/migration/%7BjobId%7D/rollback\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/v2-rollout":{"get":{"description":"Get admin v2 rollout overview for a space\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns admin v2 rollout overview for the space.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"spaceName":{"type":"string"},"baseCount":{"type":"number"},"isCanaryConfigured":{"type":"boolean"},"canaryConfigEnabled":{"type":"boolean"},"canaryFeatureEnabled":{"type":"boolean"},"bases":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["spaceId","spaceName","baseCount","isCanaryConfigured","canaryConfigEnabled","canaryFeatureEnabled","bases"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout';\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/%7BspaceId%7D/v2-rollout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/%7BspaceId%7D/v2-rollout\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/v2-rollout/check-stream":{"get":{"description":"Stream v2 schema integrity check results for all projects in a space for admin\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"required":false,"name":"statuses","in":"query"}],"responses":{"200":{"description":"SSE stream with schema integrity check results across all projects in the space"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout/check-stream?statuses=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout/check-stream?statuses=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/admin/space/%7BspaceId%7D/v2-rollout/check-stream?statuses=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/admin/space/%7BspaceId%7D/v2-rollout/check-stream?statuses=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/v2-rollout/repair-stream":{"post":{"description":"Stream v2 schema integrity repair results for all projects in a space for admin\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean"},"statuses":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"targetStatuses":{"type":"array","items":{"type":"string","enum":["warn","error"]}}}}}}},"responses":{"200":{"description":"SSE stream with schema integrity repair results across all projects in the space"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout/repair-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout/repair-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"]}'\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/space/%7BspaceId%7D/v2-rollout/repair-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({dryRun: true, statuses: ['success'], targetStatuses: ['warn']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"dryRun\\\":true,\\\"statuses\\\":[\\\"success\\\"],\\\"targetStatuses\\\":[\\\"warn\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/space/%7BspaceId%7D/v2-rollout/repair-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/v2-rollout/table/{tableId}/repair-stream":{"post":{"description":"Stream v2 schema integrity repair results for one table in a space for admin\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fieldId":{"type":"string"},"ruleId":{"type":"string"},"dryRun":{"type":"boolean"},"statuses":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"targetStatuses":{"type":"array","items":{"type":"string","enum":["warn","error"]}},"manualRepairValues":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"boolean"}]}}}}}}},"responses":{"200":{"description":"SSE stream with schema integrity repair results for one table in the space"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout/table/%7BtableId%7D/repair-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fieldId\":\"string\",\"ruleId\":\"string\",\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"],\"manualRepairValues\":{\"property1\":\"string\",\"property2\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout/table/%7BtableId%7D/repair-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fieldId\":\"string\",\"ruleId\":\"string\",\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"],\"manualRepairValues\":{\"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/admin/space/%7BspaceId%7D/v2-rollout/table/%7BtableId%7D/repair-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 fieldId: 'string',\n ruleId: 'string',\n dryRun: true,\n statuses: ['success'],\n targetStatuses: ['warn'],\n manualRepairValues: {property1: 'string', property2: 'string'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fieldId\\\":\\\"string\\\",\\\"ruleId\\\":\\\"string\\\",\\\"dryRun\\\":true,\\\"statuses\\\":[\\\"success\\\"],\\\"targetStatuses\\\":[\\\"warn\\\"],\\\"manualRepairValues\\\":{\\\"property1\\\":\\\"string\\\",\\\"property2\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/space/%7BspaceId%7D/v2-rollout/table/%7BtableId%7D/repair-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}/v2-rollout/enable":{"post":{"description":"Enable v2 canary rollout for a space from admin\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Enabled v2 rollout for the space.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"isCanaryConfigured":{"type":"boolean"}},"required":["spaceId","isCanaryConfigured"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout/enable \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D/v2-rollout/enable';\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/space/%7BspaceId%7D/v2-rollout/enable',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/space/%7BspaceId%7D/v2-rollout/enable\", 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\n\nRequired token scopes: `instance|read`","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"]},"licenseError":{"type":"object","properties":{"id":{"type":"string"},"message":{"type":"string"},"code":{"type":"string"}},"required":["id","message"]},"autoFetchEnabled":{"type":"boolean"}},"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\n\nRequired token scopes: `instance|update`","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\"))"}]},"delete":{"description":"Delete the current enterprise license\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enterprise license deleted successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\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: '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/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(\"DELETE\", \"/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\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"licenseId","in":"path"}],"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/enterprise-license/auto-fetch":{"patch":{"description":"Update enterprise license auto-renew setting\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enterprise license auto-renew setting updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/enterprise-license/auto-fetch \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/auto-fetch';\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/auto-fetch',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/auto-fetch\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license/test-connectivity":{"post":{"description":"Test connectivity to the Teable license server\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Connectivity test completed."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/enterprise-license/test-connectivity \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/test-connectivity';\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/test-connectivity',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/test-connectivity\", 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\n\nRequired token scopes: `instance|read`","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":"spaceId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"baseId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"operationId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"startTime","in":"query"},{"schema":{"type":"string"},"required":false,"name":"endTime","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"required":false,"name":"order","in":"query"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["true"]},{"type":"string","enum":["false"]}],"default":true},"required":false,"name":"grouped","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","nullable":true,"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"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"baseId":{"type":"string"},"baseName":{"type":"string"},"operationId":{"type":"string"},"rootAction":{"type":"string"},"groupCount":{"type":"number"},"origin":{"type":"object","properties":{"ip":{"type":"string"},"byApi":{"type":"boolean"},"userAgent":{"type":"string"},"referer":{"type":"string"},"method":{"type":"string"},"path":{"type":"string"},"via":{"type":"string","enum":["ai","automation","app"]}},"required":["ip"]},"payloadVersion":{"type":"string"},"payload":{"nullable":true},"createdTime":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"deactivatedTime":{"type":"string","nullable":true},"deletedTime":{"type":"string","nullable":true},"isAdmin":{"type":"boolean","nullable":true}},"required":["id","name","email"]}},"required":["id","userId","action","payloadVersion","createdTime"]}},"total":{"type":"number"},"totalIsLowerBound":{"type":"boolean"},"nextCursor":{"type":"string","nullable":true}},"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&spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&operationId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&order=SOME_STRING_VALUE&grouped=SOME_BOOLEAN_VALUE&cursor=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&spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&operationId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&order=SOME_STRING_VALUE&grouped=SOME_BOOLEAN_VALUE&cursor=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&spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&operationId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&order=SOME_STRING_VALUE&grouped=SOME_BOOLEAN_VALUE&cursor=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&spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&operationId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&order=SOME_STRING_VALUE&grouped=SOME_BOOLEAN_VALUE&cursor=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/audit-logs/operators":{"get":{"description":"Search operators (users) for the audit-log operator filter\n\nRequired token scopes: `instance|read`","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 operators for the audit-log filter.","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},"deactivatedTime":{"type":"string","nullable":true}},"required":["id","name","email","avatar"]}},"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/audit-logs/operators?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/audit-logs/operators?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/audit-logs/operators?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/audit-logs/operators?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/audit-logs/bases":{"get":{"description":"Search projects for the audit-log Project filter\n\nRequired token scopes: `instance|read`","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"},{"schema":{"type":"string"},"required":false,"name":"spaceId","in":"query"}],"responses":{"200":{"description":"Returns paginated projects for the audit-log filter.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}},"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/audit-logs/bases?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&spaceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/audit-logs/bases?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&spaceId=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/audit-logs/bases?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&spaceId=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/audit-logs/bases?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&spaceId=SOME_STRING_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\n\nRequired token scopes: `instance|read`","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","emailReceived"]}},"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"]},"hotWindowStartTime":{"type":"string"}},"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\n\nRequired token scopes: `instance|read`","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","emailReceived"]}},"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","emailReceived"]},"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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500},"required":false,"name":"take","in":"query"},{"schema":{"type":"string","enum":["success","failed","running","canceled","pending"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","description":"nextCursor from the previous page; supersedes skip when present"},"required":false,"description":"nextCursor from the previous page; supersedes skip when present","name":"cursor","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","description":"total number of runs, deduplicated across hot and archived storage. Same late-terminal exception as the run list rowCount: a run turning terminal only after an archive pass, sorting below the archive boundary, is missing until the next successful archive pass."},"nextCursor":{"type":"string","nullable":true,"description":"cursor for the next page; pass it back as `cursor`. null means the list is exhausted. Present on every page — only the first request needs skip/take"}},"required":["runs","total","nextCursor"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE&status=SOME_STRING_VALUE&cursor=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_INTEGER_VALUE&take=SOME_INTEGER_VALUE&status=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/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE&status=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/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE&status=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/table-query-ops":{"get":{"description":"Get Table Query Ops observation, recommendation, and task overview\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"organizationId","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"spaceId","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"baseId","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"tableId","in":"query"},{"schema":{"type":"string","enum":["open","accepted","dismissed","superseded"]},"required":false,"name":"recommendationStatus","in":"query"},{"schema":{"type":"string","enum":["none","low","medium","high","critical"]},"required":false,"name":"riskLevel","in":"query"},{"schema":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"required":false,"name":"taskStatus","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"recommendationSkip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"recommendationTake","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"taskSkip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"taskTake","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSearchAccessPaths","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"enabled":{"type":"boolean"},"observationWindowCount":{"type":"number"},"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"dbErrorCount":{"type":"number"},"openRecommendationCount":{"type":"number"},"acceptedRecommendationCount":{"type":"number"},"runningTaskCount":{"type":"number"},"failedTaskCount":{"type":"number"},"searchAccessPathReadyCount":{"type":"number"},"searchAccessPathDegradedCount":{"type":"number"},"searchAccessPathRuntimeEnabled":{"type":"boolean"},"oldestQueuedTaskAgeMs":{"type":"number"}},"required":["enabled","observationWindowCount","requestCount","slowCount","timeoutCount","dbErrorCount","openRecommendationCount","acceptedRecommendationCount","runningTaskCount","failedTaskCount","searchAccessPathReadyCount","searchAccessPathDegradedCount","searchAccessPathRuntimeEnabled"]},"trackA":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["slow_query_observation","saved_view_config","manual_admin","otel_import","sentry_import","pg_stat_statements","system_policy"]},"label":{"type":"string"},"status":{"type":"string","enum":["active","ready","planned","blocked"]},"signalCount":{"type":"number"},"recommendationCount":{"type":"number"},"taskCount":{"type":"number"},"note":{"type":"string"}},"required":["source","label","status","signalCount","recommendationCount","taskCount","note"]}},"accessPaths":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["pg_btree_index","pg_trgm_index","generated_substring_search","generated_tsvector","repair_index","manual_investigation","search_document","query_cache","materialized_counter","query_rewrite"]},"label":{"type":"string"},"track":{"type":"string","enum":["A","B","C"]},"status":{"type":"string","enum":["active","ready","planned","blocked"]},"recommendationCount":{"type":"number"},"taskCount":{"type":"number"},"note":{"type":"string"}},"required":["kind","label","track","status","recommendationCount","taskCount","note"]}},"indexInventory":{"type":"object","properties":{"observedTableCount":{"type":"number"},"inspectedTableCount":{"type":"number"},"usefulIndexCount":{"type":"number"},"missingIndexCandidateCount":{"type":"number"},"abnormalIndexCount":{"type":"number"},"externalIndexCount":{"type":"number"},"lastObservationTime":{"type":"string"}},"required":["observedTableCount","inspectedTableCount","usefulIndexCount","missingIndexCandidateCount","abnormalIndexCount","externalIndexCount"]}},"required":["sources","accessPaths","indexInventory"]},"hotTables":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"baseName":{"type":"string"},"tableName":{"type":"string"},"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"dbErrorCount":{"type":"number"},"maxDurationMs":{"type":"number"},"latestWindowStart":{"type":"string"}},"required":["spaceId","baseId","tableId","requestCount","slowCount","timeoutCount","dbErrorCount","maxDurationMs"]}},"searchAccessPaths":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"baseName":{"type":"string"},"tableName":{"type":"string"},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"status":{"type":"string","enum":["ready","stale","rebuild_pending"]},"coveredSearchableFieldCount":{"type":"integer","nullable":true,"minimum":0},"currentEligibleFieldCount":{"type":"integer","nullable":true,"minimum":0},"uncoveredFieldCount":{"type":"integer","nullable":true,"minimum":0}},"required":["spaceId","baseId","tableId","provider","status","coveredSearchableFieldCount","currentEligibleFieldCount","uncoveredFieldCount"]}},"recommendations":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"baseName":{"type":"string"},"tableName":{"type":"string"},"executionTarget":{"type":"object","properties":{"storage":{"type":"string","enum":["default","byodb"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"}},"required":["storage"]},"shapeHash":{"type":"string"},"policyVersion":{"type":"string"},"status":{"type":"string","enum":["open","accepted","dismissed","superseded"]},"riskLevel":{"type":"string","enum":["none","low","medium","high","critical"]},"riskScore":{"type":"number"},"reasonCodes":{"type":"array","items":{"type":"string"}},"remediationKinds":{"type":"array","items":{"type":"string"}},"remediationCandidates":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"reason":{"type":"string"},"executableInPhase1":{"type":"boolean"},"fieldId":{"type":"string"},"fieldDbName":{"type":"string"},"indexKind":{"type":"string"},"accessPath":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldDbName":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"role":{"type":"string"}}}}},"required":["kind","reason","executableInPhase1"]}},"trigger":{"type":"object","properties":{"sourceKind":{"type":"string","enum":["saved_view_config","runtime_observation","relation_field_config","unknown"]},"sourceId":{"type":"string"},"viewId":{"type":"string"},"fingerprint":{"type":"string"},"observedWorkload":{"type":"boolean"}},"required":["sourceKind","observedWorkload"]},"shapeSummary":{"type":"object","properties":{"filterFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"operatorFamily":{"type":"string"},"sourceKind":{"type":"string"}},"required":["fieldId","operatorFamily"]}},"sortFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"systemColumn":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"source":{"type":"string"}},"required":["direction","source"]}},"search":{"type":"object","properties":{"fieldCount":{"type":"number"},"allFields":{"type":"boolean"},"valueLengthBucket":{"type":"string"}},"required":["fieldCount","allFields","valueLengthBucket"]}},"required":["filterFields","sortFields"]},"queryKind":{"type":"string"},"sqlDiagnostics":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"statementKind":{"type":"string"},"fingerprint":{"type":"string"},"parameterCount":{"type":"number"},"sampled":{"type":"boolean"},"normalizedSql":{"type":"string"}},"required":["source","statementKind","fingerprint","parameterCount","sampled"]}},"planValidation":{"type":"object","properties":{"status":{"type":"string","enum":["validated","skipped","failed"]},"method":{"type":"string","enum":["explain","hypothetical_index"]},"reason":{"type":"string"},"candidateCount":{"type":"number"},"startupCostBefore":{"type":"number"},"startupCostAfter":{"type":"number"},"totalCostBefore":{"type":"number"},"totalCostAfter":{"type":"number"},"planNodeBefore":{"type":"string"},"planNodeAfter":{"type":"string"},"usesCandidateIndex":{"type":"boolean"},"indexStatements":{"type":"array","items":{"type":"string"}},"errors":{"type":"array","items":{"type":"string"}}},"required":["status","candidateCount"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"priorityScore":{"type":"number"},"heat":{"type":"object","properties":{"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"totalDurationMs":{"type":"number"},"maxDurationMs":{"type":"number"},"estimatedRows":{"type":"number","nullable":true},"seqScanCount":{"type":"number"},"indexScanCount":{"type":"number"}},"required":["requestCount","slowCount","timeoutCount","totalDurationMs","maxDurationMs","estimatedRows"]},"decision":{"type":"object","properties":{"action":{"type":"string","enum":["auto_accept","hold","reclaim","noop"]},"actor":{"type":"string","enum":["system_policy","admin"]},"outcome":{"type":"string","enum":["pending","executed","post_verify_failed","skipped"]},"wouldAutoAccept":{"type":"boolean"},"reasonCodes":{"type":"array","items":{"type":"string"}},"cooldownUntil":{"type":"string"},"decidedAt":{"type":"string"}},"required":["action","actor","outcome","wouldAutoAccept","reasonCodes"]}},"required":["id","spaceId","baseId","tableId","executionTarget","shapeHash","policyVersion","status","riskLevel","riskScore","reasonCodes","remediationKinds","sqlDiagnostics","priorityScore"]}},"total":{"type":"number"}},"required":["data","total"]},"tasks":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"recommendationId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"baseName":{"type":"string"},"tableName":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"attempts":{"type":"number"},"maxAttempts":{"type":"number"},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true},"lastError":{"type":"string","nullable":true},"result":{"nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","recommendationId","baseId","tableId","kind","status","attempts","maxAttempts"]}},"total":{"type":"number"}},"required":["data","total"]}},"required":["summary","trackA","hotTables","searchAccessPaths","recommendations","tasks"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/table-query-ops?organizationId=SOME_STRING_VALUE&spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&tableId=SOME_STRING_VALUE&recommendationStatus=SOME_STRING_VALUE&riskLevel=SOME_STRING_VALUE&taskStatus=SOME_STRING_VALUE&recommendationSkip=SOME_INTEGER_VALUE&recommendationTake=SOME_INTEGER_VALUE&taskSkip=SOME_INTEGER_VALUE&taskTake=SOME_INTEGER_VALUE&includeSearchAccessPaths=SOME_BOOLEAN_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/observability/table-query-ops?organizationId=SOME_STRING_VALUE&spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&tableId=SOME_STRING_VALUE&recommendationStatus=SOME_STRING_VALUE&riskLevel=SOME_STRING_VALUE&taskStatus=SOME_STRING_VALUE&recommendationSkip=SOME_INTEGER_VALUE&recommendationTake=SOME_INTEGER_VALUE&taskSkip=SOME_INTEGER_VALUE&taskTake=SOME_INTEGER_VALUE&includeSearchAccessPaths=SOME_BOOLEAN_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/observability/table-query-ops?organizationId=SOME_STRING_VALUE&spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&tableId=SOME_STRING_VALUE&recommendationStatus=SOME_STRING_VALUE&riskLevel=SOME_STRING_VALUE&taskStatus=SOME_STRING_VALUE&recommendationSkip=SOME_INTEGER_VALUE&recommendationTake=SOME_INTEGER_VALUE&taskSkip=SOME_INTEGER_VALUE&taskTake=SOME_INTEGER_VALUE&includeSearchAccessPaths=SOME_BOOLEAN_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/observability/table-query-ops?organizationId=SOME_STRING_VALUE&spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&tableId=SOME_STRING_VALUE&recommendationStatus=SOME_STRING_VALUE&riskLevel=SOME_STRING_VALUE&taskStatus=SOME_STRING_VALUE&recommendationSkip=SOME_INTEGER_VALUE&recommendationTake=SOME_INTEGER_VALUE&taskSkip=SOME_INTEGER_VALUE&taskTake=SOME_INTEGER_VALUE&includeSearchAccessPaths=SOME_BOOLEAN_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/table-query-ops/recommendations/accept":{"post":{"description":"Accept a Table Query Ops recommendation and enqueue its index task\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recommendationId":{"type":"string","minLength":1},"execute":{"type":"boolean"}},"required":["recommendationId"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"recommendation":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"baseName":{"type":"string"},"tableName":{"type":"string"},"executionTarget":{"type":"object","properties":{"storage":{"type":"string","enum":["default","byodb"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"}},"required":["storage"]},"shapeHash":{"type":"string"},"policyVersion":{"type":"string"},"status":{"type":"string","enum":["open","accepted","dismissed","superseded"]},"riskLevel":{"type":"string","enum":["none","low","medium","high","critical"]},"riskScore":{"type":"number"},"reasonCodes":{"type":"array","items":{"type":"string"}},"remediationKinds":{"type":"array","items":{"type":"string"}},"remediationCandidates":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"reason":{"type":"string"},"executableInPhase1":{"type":"boolean"},"fieldId":{"type":"string"},"fieldDbName":{"type":"string"},"indexKind":{"type":"string"},"accessPath":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldDbName":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"role":{"type":"string"}}}}},"required":["kind","reason","executableInPhase1"]}},"trigger":{"type":"object","properties":{"sourceKind":{"type":"string","enum":["saved_view_config","runtime_observation","relation_field_config","unknown"]},"sourceId":{"type":"string"},"viewId":{"type":"string"},"fingerprint":{"type":"string"},"observedWorkload":{"type":"boolean"}},"required":["sourceKind","observedWorkload"]},"shapeSummary":{"type":"object","properties":{"filterFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"operatorFamily":{"type":"string"},"sourceKind":{"type":"string"}},"required":["fieldId","operatorFamily"]}},"sortFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"systemColumn":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"source":{"type":"string"}},"required":["direction","source"]}},"search":{"type":"object","properties":{"fieldCount":{"type":"number"},"allFields":{"type":"boolean"},"valueLengthBucket":{"type":"string"}},"required":["fieldCount","allFields","valueLengthBucket"]}},"required":["filterFields","sortFields"]},"queryKind":{"type":"string"},"sqlDiagnostics":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"statementKind":{"type":"string"},"fingerprint":{"type":"string"},"parameterCount":{"type":"number"},"sampled":{"type":"boolean"},"normalizedSql":{"type":"string"}},"required":["source","statementKind","fingerprint","parameterCount","sampled"]}},"planValidation":{"type":"object","properties":{"status":{"type":"string","enum":["validated","skipped","failed"]},"method":{"type":"string","enum":["explain","hypothetical_index"]},"reason":{"type":"string"},"candidateCount":{"type":"number"},"startupCostBefore":{"type":"number"},"startupCostAfter":{"type":"number"},"totalCostBefore":{"type":"number"},"totalCostAfter":{"type":"number"},"planNodeBefore":{"type":"string"},"planNodeAfter":{"type":"string"},"usesCandidateIndex":{"type":"boolean"},"indexStatements":{"type":"array","items":{"type":"string"}},"errors":{"type":"array","items":{"type":"string"}}},"required":["status","candidateCount"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"priorityScore":{"type":"number"},"heat":{"type":"object","properties":{"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"totalDurationMs":{"type":"number"},"maxDurationMs":{"type":"number"},"estimatedRows":{"type":"number","nullable":true},"seqScanCount":{"type":"number"},"indexScanCount":{"type":"number"}},"required":["requestCount","slowCount","timeoutCount","totalDurationMs","maxDurationMs","estimatedRows"]},"decision":{"type":"object","properties":{"action":{"type":"string","enum":["auto_accept","hold","reclaim","noop"]},"actor":{"type":"string","enum":["system_policy","admin"]},"outcome":{"type":"string","enum":["pending","executed","post_verify_failed","skipped"]},"wouldAutoAccept":{"type":"boolean"},"reasonCodes":{"type":"array","items":{"type":"string"}},"cooldownUntil":{"type":"string"},"decidedAt":{"type":"string"}},"required":["action","actor","outcome","wouldAutoAccept","reasonCodes"]}},"required":["id","spaceId","baseId","tableId","executionTarget","shapeHash","policyVersion","status","riskLevel","riskScore","reasonCodes","remediationKinds","sqlDiagnostics","priorityScore"]},"task":{"type":"object","properties":{"id":{"type":"string"},"recommendationId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"baseName":{"type":"string"},"tableName":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"attempts":{"type":"number"},"maxAttempts":{"type":"number"},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true},"lastError":{"type":"string","nullable":true},"result":{"nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","recommendationId","baseId","tableId","kind","status","attempts","maxAttempts"]}},"required":["recommendation","task"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/table-query-ops/recommendations/accept \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recommendationId\":\"string\",\"execute\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/table-query-ops/recommendations/accept';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"recommendationId\":\"string\",\"execute\":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/observability/table-query-ops/recommendations/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({recommendationId: 'string', execute: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recommendationId\\\":\\\"string\\\",\\\"execute\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/table-query-ops/recommendations/accept\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/table-query-ops/analyze":{"get":{"description":"Analyze saved view query shapes and validate Table Query Ops index candidates\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"spaceId","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"baseId","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"tableId","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50},"required":false,"name":"maxIndexes","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"type":"object","properties":{"spaceId":{"type":"string"},"baseId":{"type":"string"},"tableId":{"type":"string"},"maxIndexes":{"type":"number"}},"required":["maxIndexes"]},"scannedViewCount":{"type":"number"},"parsedViewCount":{"type":"number"},"scannedRelationFieldCount":{"type":"number"},"candidateIndexCount":{"type":"number"},"validatedRecommendationCount":{"type":"number"},"rejectedCandidateCount":{"type":"number"},"skippedViewCount":{"type":"number"},"recommendedIndexSet":{"type":"array","items":{"type":"object","properties":{"index":{"type":"string"},"indexKind":{"type":"string"},"accessPath":{"type":"string"},"sourceKind":{"type":"string","enum":["direct_field","formula_result","formula_source","formula_expression"]},"formulaEvidence":{"type":"object","properties":{"formulaFieldId":{"type":"string"},"referencedFieldIds":{"type":"array","items":{"type":"string"}},"functionNames":{"type":"array","items":{"type":"string"}},"sourceKind":{"type":"string","enum":["formula_result","formula_source","formula_expression"]},"skippedReasons":{"type":"array","items":{"type":"string"}},"expressionIndexable":{"type":"boolean"},"expressionIndexSkippedReasons":{"type":"array","items":{"type":"string"}},"predicatePushdown":{"type":"object","properties":{"supported":{"type":"boolean"},"operatorFamilies":{"type":"array","items":{"type":"string"}},"sourceFunctionNames":{"type":"array","items":{"type":"string"}},"skippedReasons":{"type":"array","items":{"type":"string"}}},"required":["supported","operatorFamilies","sourceFunctionNames","skippedReasons"]}},"required":["referencedFieldIds","functionNames","skippedReasons"]},"fields":{"type":"array","items":{"type":"string"}},"optimizedSources":{"type":"array","items":{"type":"string"}},"optimizedQueryShapes":{"type":"array","items":{"type":"string"}},"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainMethod":{"type":"string","enum":["explain","hypothetical_index"]},"explainReason":{"type":"string"},"explainCostBefore":{"type":"number"},"explainCostAfter":{"type":"number"},"explainCostDeltaPct":{"type":"number"},"explainPlanNodeBefore":{"type":"string"},"explainPlanNodeAfter":{"type":"string"},"explainUsesCandidateIndex":{"type":"boolean"},"confidence":{"type":"string"},"nextAction":{"type":"string","enum":["ready_for_confirmation","no_index_change","candidate_not_recommended","needs_plan_validation","manual_investigation"]},"hypotheticalIndexStatement":{"type":"string"}},"required":["index","indexKind","accessPath","fields","optimizedSources","optimizedQueryShapes","explainStatus","confidence","nextAction"]}},"rejectedCandidates":{"type":"array","items":{"type":"object","properties":{"index":{"type":"string"},"indexKind":{"type":"string"},"accessPath":{"type":"string"},"sourceKind":{"type":"string","enum":["direct_field","formula_result","formula_source","formula_expression"]},"formulaEvidence":{"type":"object","properties":{"formulaFieldId":{"type":"string"},"referencedFieldIds":{"type":"array","items":{"type":"string"}},"functionNames":{"type":"array","items":{"type":"string"}},"sourceKind":{"type":"string","enum":["formula_result","formula_source","formula_expression"]},"skippedReasons":{"type":"array","items":{"type":"string"}},"expressionIndexable":{"type":"boolean"},"expressionIndexSkippedReasons":{"type":"array","items":{"type":"string"}},"predicatePushdown":{"type":"object","properties":{"supported":{"type":"boolean"},"operatorFamilies":{"type":"array","items":{"type":"string"}},"sourceFunctionNames":{"type":"array","items":{"type":"string"}},"skippedReasons":{"type":"array","items":{"type":"string"}}},"required":["supported","operatorFamilies","sourceFunctionNames","skippedReasons"]}},"required":["referencedFieldIds","functionNames","skippedReasons"]},"fields":{"type":"array","items":{"type":"string"}},"optimizedSources":{"type":"array","items":{"type":"string"}},"optimizedQueryShapes":{"type":"array","items":{"type":"string"}},"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainMethod":{"type":"string","enum":["explain","hypothetical_index"]},"explainReason":{"type":"string"},"explainCostBefore":{"type":"number"},"explainCostAfter":{"type":"number"},"explainCostDeltaPct":{"type":"number"},"explainPlanNodeBefore":{"type":"string"},"explainPlanNodeAfter":{"type":"string"},"explainUsesCandidateIndex":{"type":"boolean"},"confidence":{"type":"string"},"nextAction":{"type":"string","enum":["ready_for_confirmation","no_index_change","candidate_not_recommended","needs_plan_validation","manual_investigation"]},"hypotheticalIndexStatement":{"type":"string"}},"required":["index","indexKind","accessPath","fields","optimizedSources","optimizedQueryShapes","explainStatus","confidence","nextAction"]}},"coverageReport":{"type":"object","properties":{"scannedSourceCount":{"type":"number"},"parsedSourceCount":{"type":"number"},"shapeCreatedSourceCount":{"type":"number"},"candidateGeneratedSourceCount":{"type":"number"},"explainValidatedSourceCount":{"type":"number"},"rejectedSourceCount":{"type":"number"},"skippedSourceCount":{"type":"number"},"skippedReasons":{"type":"object","additionalProperties":{"type":"number"}},"formulaFields":{"type":"array","items":{"type":"object","properties":{"formulaFieldId":{"type":"string"},"referencedFieldIds":{"type":"array","items":{"type":"string"}},"functionNames":{"type":"array","items":{"type":"string"}},"sourceKind":{"type":"string","enum":["formula_result","formula_source","formula_expression"]},"skippedReasons":{"type":"array","items":{"type":"string"}},"expressionIndexable":{"type":"boolean"},"expressionIndexSkippedReasons":{"type":"array","items":{"type":"string"}},"predicatePushdown":{"type":"object","properties":{"supported":{"type":"boolean"},"operatorFamilies":{"type":"array","items":{"type":"string"}},"sourceFunctionNames":{"type":"array","items":{"type":"string"}},"skippedReasons":{"type":"array","items":{"type":"string"}}},"required":["supported","operatorFamilies","sourceFunctionNames","skippedReasons"]}},"required":["referencedFieldIds","functionNames","skippedReasons"]}},"scannedFormulaFieldCount":{"type":"number"},"validatedFormulaFieldCount":{"type":"number"},"rejectedFormulaFieldCount":{"type":"number"},"skippedFormulaFieldCount":{"type":"number"},"formulaSkippedReasons":{"type":"object","additionalProperties":{"type":"number"}},"sources":{"type":"array","items":{"type":"object","properties":{"sourceType":{"type":"string","enum":["saved_view","relation_field","runtime_observation","manual"]},"sourceId":{"type":"string"},"tableId":{"type":"string"},"statuses":{"type":"array","items":{"type":"string","enum":["scanned","parsed","shape_created","candidate_generated","explain_validated","rejected","skipped"]}},"shapeHash":{"type":"string"},"queryKind":{"type":"string"},"candidateIndexKeys":{"type":"array","items":{"type":"string"}},"recommendedIndexKeys":{"type":"array","items":{"type":"string"}},"rejectedIndexKeys":{"type":"array","items":{"type":"string"}},"skippedReason":{"type":"string"},"error":{"type":"string"}},"required":["sourceType","sourceId","tableId","statuses","candidateIndexKeys","recommendedIndexKeys","rejectedIndexKeys"]}}},"required":["scannedSourceCount","parsedSourceCount","shapeCreatedSourceCount","candidateGeneratedSourceCount","explainValidatedSourceCount","rejectedSourceCount","skippedSourceCount","skippedReasons","formulaFields","scannedFormulaFieldCount","validatedFormulaFieldCount","rejectedFormulaFieldCount","skippedFormulaFieldCount","formulaSkippedReasons","sources"]},"queryRiskReports":{"type":"array","items":{"type":"object","properties":{"sourceType":{"type":"string","enum":["saved_view","relation_field","runtime_observation","manual"]},"sourceId":{"type":"string"},"sourceName":{"type":"string"},"tableId":{"type":"string"},"queryKind":{"type":"string"},"shapeHash":{"type":"string"},"riskLevel":{"type":"string","enum":["none","low","medium","high","critical"]},"riskScore":{"type":"number"},"reasonCodes":{"type":"array","items":{"type":"string"}},"shapeSummary":{"type":"object","properties":{"filterFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"operatorFamily":{"type":"string"},"sourceKind":{"type":"string"}},"required":["fieldId","operatorFamily"]}},"sortFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"systemColumn":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"source":{"type":"string"}},"required":["direction","source"]}},"search":{"type":"object","properties":{"fieldCount":{"type":"number"},"allFields":{"type":"boolean"},"valueLengthBucket":{"type":"string"}},"required":["fieldCount","allFields","valueLengthBucket"]},"aggregation":{"type":"object","properties":{"groupFieldCount":{"type":"number"},"metricCount":{"type":"number"},"hasFilter":{"type":"boolean"}},"required":["groupFieldCount","metricCount","hasFilter"]},"relation":{"type":"object","properties":{"relationKind":{"type":"string"},"sourceTableId":{"type":"string"},"targetTableId":{"type":"string"},"fieldReferenceCount":{"type":"number"},"hasTargetFilter":{"type":"boolean"},"hasTargetSort":{"type":"boolean"}},"required":["relationKind","sourceTableId","targetTableId","fieldReferenceCount","hasTargetFilter","hasTargetSort"]},"formulaFields":{"type":"array","items":{"type":"object","properties":{"formulaFieldId":{"type":"string"},"referencedFieldIds":{"type":"array","items":{"type":"string"}},"functionNames":{"type":"array","items":{"type":"string"}},"sourceKind":{"type":"string","enum":["formula_result","formula_source","formula_expression"]},"skippedReasons":{"type":"array","items":{"type":"string"}},"expressionIndexable":{"type":"boolean"},"expressionIndexSkippedReasons":{"type":"array","items":{"type":"string"}},"predicatePushdown":{"type":"object","properties":{"supported":{"type":"boolean"},"operatorFamilies":{"type":"array","items":{"type":"string"}},"sourceFunctionNames":{"type":"array","items":{"type":"string"}},"skippedReasons":{"type":"array","items":{"type":"string"}}},"required":["supported","operatorFamilies","sourceFunctionNames","skippedReasons"]}},"required":["referencedFieldIds","functionNames","skippedReasons"]}}},"required":["filterFields","sortFields","formulaFields"]},"physicalStats":{"type":"object","properties":{"estimatedRows":{"type":"number","nullable":true}},"required":["estimatedRows"]},"indexInventory":{"type":"object","properties":{"state":{"type":"string"},"existingIndexStructures":{"type":"array","items":{"type":"string"}},"candidateIndexStructures":{"type":"array","items":{"type":"string"}},"abnormalIndexes":{"type":"array","items":{"type":"string"}}},"required":["state","existingIndexStructures","candidateIndexStructures","abnormalIndexes"]},"planEvidence":{"type":"object","properties":{"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainMethod":{"type":"string","enum":["explain","hypothetical_index"]},"explainReason":{"type":"string"},"costBefore":{"type":"number"},"costAfter":{"type":"number"},"costDeltaPct":{"type":"number"},"planNodeBefore":{"type":"string"},"planNodeAfter":{"type":"string"},"usesCandidateIndex":{"type":"boolean"}},"required":["explainStatus"]},"remediationSummary":{"type":"object","properties":{"hasIndexRecommendation":{"type":"boolean"},"recommendedIndexKeys":{"type":"array","items":{"type":"string"}},"rejectedIndexKeys":{"type":"array","items":{"type":"string"}},"nextAction":{"type":"string","enum":["ready_for_confirmation","no_index_change","candidate_not_recommended","needs_plan_validation","manual_investigation"]}},"required":["hasIndexRecommendation","recommendedIndexKeys","rejectedIndexKeys","nextAction"]}},"required":["sourceType","sourceId","tableId","queryKind","shapeHash","riskLevel","riskScore","reasonCodes","shapeSummary","physicalStats","indexInventory","remediationSummary"]}},"rows":{"type":"array","items":{"type":"object","properties":{"index":{"type":"string"},"indexKind":{"type":"string"},"accessPath":{"type":"string"},"sourceKind":{"type":"string","enum":["direct_field","formula_result","formula_source","formula_expression"]},"formulaEvidence":{"type":"object","properties":{"formulaFieldId":{"type":"string"},"referencedFieldIds":{"type":"array","items":{"type":"string"}},"functionNames":{"type":"array","items":{"type":"string"}},"sourceKind":{"type":"string","enum":["formula_result","formula_source","formula_expression"]},"skippedReasons":{"type":"array","items":{"type":"string"}},"expressionIndexable":{"type":"boolean"},"expressionIndexSkippedReasons":{"type":"array","items":{"type":"string"}},"predicatePushdown":{"type":"object","properties":{"supported":{"type":"boolean"},"operatorFamilies":{"type":"array","items":{"type":"string"}},"sourceFunctionNames":{"type":"array","items":{"type":"string"}},"skippedReasons":{"type":"array","items":{"type":"string"}}},"required":["supported","operatorFamilies","sourceFunctionNames","skippedReasons"]}},"required":["referencedFieldIds","functionNames","skippedReasons"]},"fields":{"type":"array","items":{"type":"string"}},"optimizedSources":{"type":"array","items":{"type":"string"}},"optimizedQueryShapes":{"type":"array","items":{"type":"string"}},"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainMethod":{"type":"string","enum":["explain","hypothetical_index"]},"explainReason":{"type":"string"},"explainCostBefore":{"type":"number"},"explainCostAfter":{"type":"number"},"explainCostDeltaPct":{"type":"number"},"explainPlanNodeBefore":{"type":"string"},"explainPlanNodeAfter":{"type":"string"},"explainUsesCandidateIndex":{"type":"boolean"},"confidence":{"type":"string"},"nextAction":{"type":"string","enum":["ready_for_confirmation","no_index_change","candidate_not_recommended","needs_plan_validation","manual_investigation"]},"hypotheticalIndexStatement":{"type":"string"}},"required":["index","indexKind","accessPath","fields","optimizedSources","optimizedQueryShapes","explainStatus","confidence","nextAction"]}}},"required":["scope","scannedViewCount","parsedViewCount","scannedRelationFieldCount","candidateIndexCount","validatedRecommendationCount","rejectedCandidateCount","skippedViewCount","recommendedIndexSet","rejectedCandidates","coverageReport","queryRiskReports","rows"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/table-query-ops/analyze?spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&tableId=SOME_STRING_VALUE&maxIndexes=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/table-query-ops/analyze?spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&tableId=SOME_STRING_VALUE&maxIndexes=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/observability/table-query-ops/analyze?spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&tableId=SOME_STRING_VALUE&maxIndexes=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/observability/table-query-ops/analyze?spaceId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE&tableId=SOME_STRING_VALUE&maxIndexes=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/table-query-ops/search-access-paths/analyze":{"post":{"description":"Analyze generated text GIN access paths for exact substring search\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","minLength":1},"baseId":{"type":"string","minLength":1},"tableId":{"type":"string","minLength":1},"fieldIds":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"searchProbe":{"type":"string"},"includeResultSamples":{"type":"boolean","default":true},"sampleResultLimit":{"type":"integer","nullable":true,"minimum":0,"maximum":3,"default":3},"maxRecommendations":{"type":"integer","minimum":1,"maximum":20}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"type":"object","properties":{"spaceId":{"type":"string"},"baseId":{"type":"string"},"tableId":{"type":"string"},"fieldIds":{"type":"array","items":{"type":"string"}},"semantics":{"type":"string","enum":["substring"]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"maxRecommendations":{"type":"number"}},"required":["semantics"]},"tableCount":{"type":"number"},"searchProbeLengthBucket":{"type":"string","enum":["none","short","medium","long"]},"scannedFieldCount":{"type":"number"},"coveredFieldCount":{"type":"number"},"skippedFieldCount":{"type":"number"},"recommendations":{"type":"array","items":{"type":"object","properties":{"candidateKey":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"},"baseId":{"type":"string"},"generatedColumnName":{"type":"string"},"generatedTextColumnName":{"type":"string"},"indexName":{"type":"string"},"indexKind":{"type":"string","enum":["gin_bigm","gin_trgm"]},"accessPath":{"type":"string","enum":["generated_text"]},"semantics":{"type":"string","enum":["substring"]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"providerCapability":{"type":"object","properties":{"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"extensionName":{"type":"string","enum":["pg_bigm","pg_trgm"]},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"operatorClassSchema":{"type":"string"},"extensionInstalled":{"type":"boolean"},"extensionAvailable":{"type":"boolean"},"operatorClassInstalled":{"type":"boolean"},"usable":{"type":"boolean"},"minimumProbeLength":{"type":"integer","minimum":1},"reason":{"type":"string","enum":["extension_not_installed","extension_unavailable","extension_not_preloaded","operator_class_missing"]}},"required":["provider","extensionName","operatorClass","extensionInstalled","extensionAvailable","operatorClassInstalled","usable","minimumProbeLength"]},"providerCapabilities":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"extensionName":{"type":"string","enum":["pg_bigm","pg_trgm"]},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"operatorClassSchema":{"type":"string"},"extensionInstalled":{"type":"boolean"},"extensionAvailable":{"type":"boolean"},"operatorClassInstalled":{"type":"boolean"},"usable":{"type":"boolean"},"minimumProbeLength":{"type":"integer","minimum":1},"reason":{"type":"string","enum":["extension_not_installed","extension_unavailable","extension_not_preloaded","operator_class_missing"]}},"required":["provider","extensionName","operatorClass","extensionInstalled","extensionAvailable","operatorClassInstalled","usable","minimumProbeLength"]}},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"minimumProbeLength":{"type":"integer","minimum":1},"searchScope":{"type":"string","enum":["selected_fields","all_fields"]},"coveredFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"fieldDbName":{"type":"string"},"fieldType":{"type":"string"},"valueType":{"type":"string"},"included":{"type":"boolean"},"textProjection":{"type":"object","properties":{"kind":{"type":"string","enum":["plain","multiline","plain_list","structured_title","structured_title_list","rounded_number","rounded_number_list"]},"precision":{"type":"integer","minimum":0}},"required":["kind"]},"skippedReason":{"type":"string"}},"required":["fieldId","fieldName","fieldType","included"]}},"skippedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"fieldDbName":{"type":"string"},"fieldType":{"type":"string"},"valueType":{"type":"string"},"included":{"type":"boolean"},"textProjection":{"type":"object","properties":{"kind":{"type":"string","enum":["plain","multiline","plain_list","structured_title","structured_title_list","rounded_number","rounded_number_list"]},"precision":{"type":"integer","minimum":0}},"required":["kind"]},"skippedReason":{"type":"string"}},"required":["fieldId","fieldName","fieldType","included"]}},"estimatedRows":{"type":"number"},"tableSizeBytes":{"type":"number"},"inventory":{"type":"object","properties":{"state":{"type":"string","enum":["ready","missing","stale","invalid","unknown"]},"semantics":{"type":"string","enum":["substring"]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"existingGeneratedColumn":{"type":"string"},"existingIndexName":{"type":"string"},"existingIndexValid":{"type":"boolean"},"staleReasons":{"type":"array","items":{"type":"string"}}},"required":["state","staleReasons"]},"planEvidence":{"type":"object","properties":{"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainMethod":{"type":"string","enum":["explain","hypothetical_index","real_index"]},"explainReason":{"type":"string"},"costBefore":{"type":"number"},"costAfter":{"type":"number"},"costDeltaPct":{"type":"number"},"planNodeBefore":{"type":"string"},"planNodeAfter":{"type":"string"},"usesCandidateIndex":{"type":"boolean"},"semanticsCompatible":{"type":"boolean"},"hypotheticalIndexStatement":{"type":"string"},"sqlDetails":{"type":"object","properties":{"beforeSql":{"type":"string"},"afterSql":{"type":"string"},"searchProbeLengthBucket":{"type":"string","enum":["none","short","medium","long"]},"placeholders":{"type":"object","properties":{"likePattern":{"type":"string"},"tsquery":{"type":"string"}},"required":["likePattern","tsquery"]},"redaction":{"type":"string","enum":["search_probe_parameterized"]}},"required":["beforeSql","afterSql","searchProbeLengthBucket","placeholders","redaction"]}},"required":["explainStatus"]},"resultCompatibility":{"type":"object","properties":{"status":{"type":"string","enum":["exact","mismatch","not_validated"]},"baseline":{"type":"string","enum":["ilike"]},"baselineMatchCount":{"type":"number"},"candidateMatchCount":{"type":"number"},"sampleOverlap":{"type":"number","minimum":0,"maximum":1},"reason":{"type":"string"}},"required":["status","baseline"]},"repeatedTiming":{"type":"object","properties":{"status":{"type":"string","enum":["measured","not_measured"]},"iterations":{"type":"integer","minimum":1},"warmupIterations":{"type":"integer","minimum":0},"beforeMedianMs":{"type":"number","minimum":0},"afterMedianMs":{"type":"number","minimum":0},"improvementPct":{"type":"number"},"reason":{"type":"string"}},"required":["status"]},"semanticsReport":{"type":"object","properties":{"searchProbeLengthBucket":{"type":"string","enum":["none","short","medium","long"]},"baselineStrategy":{"type":"string","enum":["ilike"]},"comparisons":{"type":"array","items":{"type":"object","properties":{"strategy":{"type":"string","enum":["ilike","bigram","trigram"]},"label":{"type":"string"},"semantics":{"type":"string","enum":["substring","trigram_substring"]},"available":{"type":"boolean"},"availabilityReason":{"type":"string"},"indexSupport":{"type":"string","enum":["none","generated_text_gin","existing_or_manual_trigram","extension_required"]},"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainReason":{"type":"string"},"cost":{"type":"number"},"planNode":{"type":"string"},"usesIndex":{"type":"boolean"},"matchCount":{"type":"number"},"matchCountDeltaFromIlike":{"type":"number"},"matchCountDeltaPctFromIlike":{"type":"number"},"sampleOverlapWithIlike":{"type":"number"},"sampleResults":{"type":"array","items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldPreviews":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"fieldDbName":{"type":"string"},"preview":{"type":"string"},"previewLength":{"type":"number"},"truncated":{"type":"boolean"}},"required":["fieldId","fieldName","fieldDbName","preview","previewLength","truncated"]}}},"required":["fieldPreviews"]}}},"required":["strategy","label","semantics","available","indexSupport","explainStatus","sampleResults"]}}},"required":["searchProbeLengthBucket","baselineStrategy","comparisons"]},"nextAction":{"type":"string","enum":["ready_for_confirmation","no_index_change","candidate_not_recommended","needs_plan_validation","manual_investigation"]}},"required":["candidateKey","tableId","tableName","baseId","generatedColumnName","generatedTextColumnName","indexName","indexKind","accessPath","semantics","provider","providerCapability","providerCapabilities","operatorClass","minimumProbeLength","searchScope","coveredFields","skippedFields","estimatedRows","inventory","planEvidence","resultCompatibility","repeatedTiming","nextAction"]}},"scopeHeatReports":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"estimatedRows":{"type":"number"},"scannedObservationCount":{"type":"number"},"scopes":{"type":"array","items":{"type":"object","properties":{"scopeKey":{"type":"string"},"searchedFieldIds":{"type":"array","items":{"type":"string"}},"searchedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["fieldId","fieldName"]}},"searchMode":{"type":"string","enum":["ilike","substring","trigram","full_text"]},"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"totalDurationMs":{"type":"number"},"maxDurationMs":{"type":"number"},"averageDurationMs":{"type":"number"},"heatScore":{"type":"number"},"hot":{"type":"boolean"},"reasonCodes":{"type":"array","items":{"type":"string","enum":["high_request_volume","high_total_duration","slow_query_volume","large_table"]}},"nextAction":{"type":"string","enum":["needs_plan_validation","no_index_change"]}},"required":["scopeKey","searchedFieldIds","searchedFields","searchMode","requestCount","slowCount","timeoutCount","totalDurationMs","maxDurationMs","averageDurationMs","heatScore","hot","reasonCodes","nextAction"]}}},"required":["tableId","tableName","estimatedRows","scannedObservationCount","scopes"]}},"scopedExpressionRecommendations":{"type":"array","items":{"type":"object","properties":{"candidateKey":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"},"baseId":{"type":"string"},"indexName":{"type":"string"},"indexKind":{"type":"string","enum":["gin_bigm_expression","gin_trgm_expression"]},"accessPath":{"type":"string","enum":["scoped_expression_gin"]},"semantics":{"type":"string","enum":["substring"]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"minimumProbeLength":{"type":"integer","minimum":1},"searchedFieldIds":{"type":"array","items":{"type":"string"}},"coveredFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"fieldDbName":{"type":"string"},"fieldType":{"type":"string"},"valueType":{"type":"string"},"included":{"type":"boolean"},"textProjection":{"type":"object","properties":{"kind":{"type":"string","enum":["plain","multiline","plain_list","structured_title","structured_title_list","rounded_number","rounded_number_list"]},"precision":{"type":"integer","minimum":0}},"required":["kind"]},"skippedReason":{"type":"string"}},"required":["fieldId","fieldName","fieldType","included"]}},"scopeHeat":{"type":"object","properties":{"scopeKey":{"type":"string"},"searchedFieldIds":{"type":"array","items":{"type":"string"}},"searchedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["fieldId","fieldName"]}},"searchMode":{"type":"string","enum":["ilike","substring","trigram","full_text"]},"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"totalDurationMs":{"type":"number"},"maxDurationMs":{"type":"number"},"averageDurationMs":{"type":"number"},"heatScore":{"type":"number"},"hot":{"type":"boolean"},"reasonCodes":{"type":"array","items":{"type":"string","enum":["high_request_volume","high_total_duration","slow_query_volume","large_table"]}},"nextAction":{"type":"string","enum":["needs_plan_validation","no_index_change"]}},"required":["scopeKey","searchedFieldIds","searchedFields","searchMode","requestCount","slowCount","timeoutCount","totalDurationMs","maxDurationMs","averageDurationMs","heatScore","hot","reasonCodes","nextAction"]},"planEvidence":{"type":"object","properties":{"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainMethod":{"type":"string","enum":["explain","hypothetical_index","real_index"]},"explainReason":{"type":"string"},"costBefore":{"type":"number"},"costAfter":{"type":"number"},"costDeltaPct":{"type":"number"},"planNodeBefore":{"type":"string"},"planNodeAfter":{"type":"string"},"usesCandidateIndex":{"type":"boolean"},"semanticsCompatible":{"type":"boolean"},"hypotheticalIndexStatement":{"type":"string"},"sqlDetails":{"type":"object","properties":{"beforeSql":{"type":"string"},"afterSql":{"type":"string"},"searchProbeLengthBucket":{"type":"string","enum":["none","short","medium","long"]},"placeholders":{"type":"object","properties":{"likePattern":{"type":"string"},"tsquery":{"type":"string"}},"required":["likePattern","tsquery"]},"redaction":{"type":"string","enum":["search_probe_parameterized"]}},"required":["beforeSql","afterSql","searchProbeLengthBucket","placeholders","redaction"]}},"required":["explainStatus"]},"nextAction":{"type":"string","enum":["ready_for_confirmation","no_index_change","candidate_not_recommended","needs_plan_validation","manual_investigation"]}},"required":["candidateKey","tableId","tableName","baseId","indexName","indexKind","accessPath","semantics","provider","operatorClass","minimumProbeLength","searchedFieldIds","coveredFields","scopeHeat","planEvidence","nextAction"]}},"coverageReport":{"type":"object","properties":{"scannedFieldCount":{"type":"number"},"coveredFieldCount":{"type":"number"},"skippedFieldCount":{"type":"number"},"skippedReasons":{"type":"object","additionalProperties":{"type":"number"}}},"required":["scannedFieldCount","coveredFieldCount","skippedFieldCount","skippedReasons"]}},"required":["scope","tableCount","searchProbeLengthBucket","scannedFieldCount","coveredFieldCount","skippedFieldCount","recommendations","scopeHeatReports","scopedExpressionRecommendations","coverageReport"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/table-query-ops/search-access-paths/analyze \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"baseId\":\"string\",\"tableId\":\"string\",\"fieldIds\":\"string\",\"provider\":\"pg_bigm\",\"searchProbe\":\"string\",\"includeResultSamples\":true,\"sampleResultLimit\":3,\"maxRecommendations\":1}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/table-query-ops/search-access-paths/analyze';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"baseId\":\"string\",\"tableId\":\"string\",\"fieldIds\":\"string\",\"provider\":\"pg_bigm\",\"searchProbe\":\"string\",\"includeResultSamples\":true,\"sampleResultLimit\":3,\"maxRecommendations\":1}'\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/observability/table-query-ops/search-access-paths/analyze',\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 spaceId: 'string',\n baseId: 'string',\n tableId: 'string',\n fieldIds: 'string',\n provider: 'pg_bigm',\n searchProbe: 'string',\n includeResultSamples: true,\n sampleResultLimit: 3,\n maxRecommendations: 1\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"baseId\\\":\\\"string\\\",\\\"tableId\\\":\\\"string\\\",\\\"fieldIds\\\":\\\"string\\\",\\\"provider\\\":\\\"pg_bigm\\\",\\\"searchProbe\\\":\\\"string\\\",\\\"includeResultSamples\\\":true,\\\"sampleResultLimit\\\":3,\\\"maxRecommendations\\\":1}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/table-query-ops/search-access-paths/analyze\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/table-query-ops/search-vectors/analyze":{"post":{"description":"Compatibility alias for substring search access-path analysis\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","minLength":1},"baseId":{"type":"string","minLength":1},"tableId":{"type":"string","minLength":1},"fieldIds":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"searchProbe":{"type":"string"},"includeResultSamples":{"type":"boolean","default":true},"sampleResultLimit":{"type":"integer","nullable":true,"minimum":0,"maximum":3,"default":3},"maxRecommendations":{"type":"integer","minimum":1,"maximum":20}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"type":"object","properties":{"spaceId":{"type":"string"},"baseId":{"type":"string"},"tableId":{"type":"string"},"fieldIds":{"type":"array","items":{"type":"string"}},"semantics":{"type":"string","enum":["substring"]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"maxRecommendations":{"type":"number"}},"required":["semantics"]},"tableCount":{"type":"number"},"searchProbeLengthBucket":{"type":"string","enum":["none","short","medium","long"]},"scannedFieldCount":{"type":"number"},"coveredFieldCount":{"type":"number"},"skippedFieldCount":{"type":"number"},"recommendations":{"type":"array","items":{"type":"object","properties":{"candidateKey":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"},"baseId":{"type":"string"},"generatedColumnName":{"type":"string"},"generatedTextColumnName":{"type":"string"},"indexName":{"type":"string"},"indexKind":{"type":"string","enum":["gin_bigm","gin_trgm"]},"accessPath":{"type":"string","enum":["generated_text"]},"semantics":{"type":"string","enum":["substring"]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"providerCapability":{"type":"object","properties":{"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"extensionName":{"type":"string","enum":["pg_bigm","pg_trgm"]},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"operatorClassSchema":{"type":"string"},"extensionInstalled":{"type":"boolean"},"extensionAvailable":{"type":"boolean"},"operatorClassInstalled":{"type":"boolean"},"usable":{"type":"boolean"},"minimumProbeLength":{"type":"integer","minimum":1},"reason":{"type":"string","enum":["extension_not_installed","extension_unavailable","extension_not_preloaded","operator_class_missing"]}},"required":["provider","extensionName","operatorClass","extensionInstalled","extensionAvailable","operatorClassInstalled","usable","minimumProbeLength"]},"providerCapabilities":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"extensionName":{"type":"string","enum":["pg_bigm","pg_trgm"]},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"operatorClassSchema":{"type":"string"},"extensionInstalled":{"type":"boolean"},"extensionAvailable":{"type":"boolean"},"operatorClassInstalled":{"type":"boolean"},"usable":{"type":"boolean"},"minimumProbeLength":{"type":"integer","minimum":1},"reason":{"type":"string","enum":["extension_not_installed","extension_unavailable","extension_not_preloaded","operator_class_missing"]}},"required":["provider","extensionName","operatorClass","extensionInstalled","extensionAvailable","operatorClassInstalled","usable","minimumProbeLength"]}},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"minimumProbeLength":{"type":"integer","minimum":1},"searchScope":{"type":"string","enum":["selected_fields","all_fields"]},"coveredFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"fieldDbName":{"type":"string"},"fieldType":{"type":"string"},"valueType":{"type":"string"},"included":{"type":"boolean"},"textProjection":{"type":"object","properties":{"kind":{"type":"string","enum":["plain","multiline","plain_list","structured_title","structured_title_list","rounded_number","rounded_number_list"]},"precision":{"type":"integer","minimum":0}},"required":["kind"]},"skippedReason":{"type":"string"}},"required":["fieldId","fieldName","fieldType","included"]}},"skippedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"fieldDbName":{"type":"string"},"fieldType":{"type":"string"},"valueType":{"type":"string"},"included":{"type":"boolean"},"textProjection":{"type":"object","properties":{"kind":{"type":"string","enum":["plain","multiline","plain_list","structured_title","structured_title_list","rounded_number","rounded_number_list"]},"precision":{"type":"integer","minimum":0}},"required":["kind"]},"skippedReason":{"type":"string"}},"required":["fieldId","fieldName","fieldType","included"]}},"estimatedRows":{"type":"number"},"tableSizeBytes":{"type":"number"},"inventory":{"type":"object","properties":{"state":{"type":"string","enum":["ready","missing","stale","invalid","unknown"]},"semantics":{"type":"string","enum":["substring"]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"existingGeneratedColumn":{"type":"string"},"existingIndexName":{"type":"string"},"existingIndexValid":{"type":"boolean"},"staleReasons":{"type":"array","items":{"type":"string"}}},"required":["state","staleReasons"]},"planEvidence":{"type":"object","properties":{"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainMethod":{"type":"string","enum":["explain","hypothetical_index","real_index"]},"explainReason":{"type":"string"},"costBefore":{"type":"number"},"costAfter":{"type":"number"},"costDeltaPct":{"type":"number"},"planNodeBefore":{"type":"string"},"planNodeAfter":{"type":"string"},"usesCandidateIndex":{"type":"boolean"},"semanticsCompatible":{"type":"boolean"},"hypotheticalIndexStatement":{"type":"string"},"sqlDetails":{"type":"object","properties":{"beforeSql":{"type":"string"},"afterSql":{"type":"string"},"searchProbeLengthBucket":{"type":"string","enum":["none","short","medium","long"]},"placeholders":{"type":"object","properties":{"likePattern":{"type":"string"},"tsquery":{"type":"string"}},"required":["likePattern","tsquery"]},"redaction":{"type":"string","enum":["search_probe_parameterized"]}},"required":["beforeSql","afterSql","searchProbeLengthBucket","placeholders","redaction"]}},"required":["explainStatus"]},"resultCompatibility":{"type":"object","properties":{"status":{"type":"string","enum":["exact","mismatch","not_validated"]},"baseline":{"type":"string","enum":["ilike"]},"baselineMatchCount":{"type":"number"},"candidateMatchCount":{"type":"number"},"sampleOverlap":{"type":"number","minimum":0,"maximum":1},"reason":{"type":"string"}},"required":["status","baseline"]},"repeatedTiming":{"type":"object","properties":{"status":{"type":"string","enum":["measured","not_measured"]},"iterations":{"type":"integer","minimum":1},"warmupIterations":{"type":"integer","minimum":0},"beforeMedianMs":{"type":"number","minimum":0},"afterMedianMs":{"type":"number","minimum":0},"improvementPct":{"type":"number"},"reason":{"type":"string"}},"required":["status"]},"semanticsReport":{"type":"object","properties":{"searchProbeLengthBucket":{"type":"string","enum":["none","short","medium","long"]},"baselineStrategy":{"type":"string","enum":["ilike"]},"comparisons":{"type":"array","items":{"type":"object","properties":{"strategy":{"type":"string","enum":["ilike","bigram","trigram"]},"label":{"type":"string"},"semantics":{"type":"string","enum":["substring","trigram_substring"]},"available":{"type":"boolean"},"availabilityReason":{"type":"string"},"indexSupport":{"type":"string","enum":["none","generated_text_gin","existing_or_manual_trigram","extension_required"]},"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainReason":{"type":"string"},"cost":{"type":"number"},"planNode":{"type":"string"},"usesIndex":{"type":"boolean"},"matchCount":{"type":"number"},"matchCountDeltaFromIlike":{"type":"number"},"matchCountDeltaPctFromIlike":{"type":"number"},"sampleOverlapWithIlike":{"type":"number"},"sampleResults":{"type":"array","items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldPreviews":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"fieldDbName":{"type":"string"},"preview":{"type":"string"},"previewLength":{"type":"number"},"truncated":{"type":"boolean"}},"required":["fieldId","fieldName","fieldDbName","preview","previewLength","truncated"]}}},"required":["fieldPreviews"]}}},"required":["strategy","label","semantics","available","indexSupport","explainStatus","sampleResults"]}}},"required":["searchProbeLengthBucket","baselineStrategy","comparisons"]},"nextAction":{"type":"string","enum":["ready_for_confirmation","no_index_change","candidate_not_recommended","needs_plan_validation","manual_investigation"]}},"required":["candidateKey","tableId","tableName","baseId","generatedColumnName","generatedTextColumnName","indexName","indexKind","accessPath","semantics","provider","providerCapability","providerCapabilities","operatorClass","minimumProbeLength","searchScope","coveredFields","skippedFields","estimatedRows","inventory","planEvidence","resultCompatibility","repeatedTiming","nextAction"]}},"scopeHeatReports":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"estimatedRows":{"type":"number"},"scannedObservationCount":{"type":"number"},"scopes":{"type":"array","items":{"type":"object","properties":{"scopeKey":{"type":"string"},"searchedFieldIds":{"type":"array","items":{"type":"string"}},"searchedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["fieldId","fieldName"]}},"searchMode":{"type":"string","enum":["ilike","substring","trigram","full_text"]},"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"totalDurationMs":{"type":"number"},"maxDurationMs":{"type":"number"},"averageDurationMs":{"type":"number"},"heatScore":{"type":"number"},"hot":{"type":"boolean"},"reasonCodes":{"type":"array","items":{"type":"string","enum":["high_request_volume","high_total_duration","slow_query_volume","large_table"]}},"nextAction":{"type":"string","enum":["needs_plan_validation","no_index_change"]}},"required":["scopeKey","searchedFieldIds","searchedFields","searchMode","requestCount","slowCount","timeoutCount","totalDurationMs","maxDurationMs","averageDurationMs","heatScore","hot","reasonCodes","nextAction"]}}},"required":["tableId","tableName","estimatedRows","scannedObservationCount","scopes"]}},"scopedExpressionRecommendations":{"type":"array","items":{"type":"object","properties":{"candidateKey":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"},"baseId":{"type":"string"},"indexName":{"type":"string"},"indexKind":{"type":"string","enum":["gin_bigm_expression","gin_trgm_expression"]},"accessPath":{"type":"string","enum":["scoped_expression_gin"]},"semantics":{"type":"string","enum":["substring"]},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"operatorClass":{"type":"string","enum":["gin_bigm_ops","gin_trgm_ops"]},"minimumProbeLength":{"type":"integer","minimum":1},"searchedFieldIds":{"type":"array","items":{"type":"string"}},"coveredFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"fieldDbName":{"type":"string"},"fieldType":{"type":"string"},"valueType":{"type":"string"},"included":{"type":"boolean"},"textProjection":{"type":"object","properties":{"kind":{"type":"string","enum":["plain","multiline","plain_list","structured_title","structured_title_list","rounded_number","rounded_number_list"]},"precision":{"type":"integer","minimum":0}},"required":["kind"]},"skippedReason":{"type":"string"}},"required":["fieldId","fieldName","fieldType","included"]}},"scopeHeat":{"type":"object","properties":{"scopeKey":{"type":"string"},"searchedFieldIds":{"type":"array","items":{"type":"string"}},"searchedFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["fieldId","fieldName"]}},"searchMode":{"type":"string","enum":["ilike","substring","trigram","full_text"]},"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"totalDurationMs":{"type":"number"},"maxDurationMs":{"type":"number"},"averageDurationMs":{"type":"number"},"heatScore":{"type":"number"},"hot":{"type":"boolean"},"reasonCodes":{"type":"array","items":{"type":"string","enum":["high_request_volume","high_total_duration","slow_query_volume","large_table"]}},"nextAction":{"type":"string","enum":["needs_plan_validation","no_index_change"]}},"required":["scopeKey","searchedFieldIds","searchedFields","searchMode","requestCount","slowCount","timeoutCount","totalDurationMs","maxDurationMs","averageDurationMs","heatScore","hot","reasonCodes","nextAction"]},"planEvidence":{"type":"object","properties":{"explainStatus":{"type":"string","enum":["validated","skipped","failed"]},"explainMethod":{"type":"string","enum":["explain","hypothetical_index","real_index"]},"explainReason":{"type":"string"},"costBefore":{"type":"number"},"costAfter":{"type":"number"},"costDeltaPct":{"type":"number"},"planNodeBefore":{"type":"string"},"planNodeAfter":{"type":"string"},"usesCandidateIndex":{"type":"boolean"},"semanticsCompatible":{"type":"boolean"},"hypotheticalIndexStatement":{"type":"string"},"sqlDetails":{"type":"object","properties":{"beforeSql":{"type":"string"},"afterSql":{"type":"string"},"searchProbeLengthBucket":{"type":"string","enum":["none","short","medium","long"]},"placeholders":{"type":"object","properties":{"likePattern":{"type":"string"},"tsquery":{"type":"string"}},"required":["likePattern","tsquery"]},"redaction":{"type":"string","enum":["search_probe_parameterized"]}},"required":["beforeSql","afterSql","searchProbeLengthBucket","placeholders","redaction"]}},"required":["explainStatus"]},"nextAction":{"type":"string","enum":["ready_for_confirmation","no_index_change","candidate_not_recommended","needs_plan_validation","manual_investigation"]}},"required":["candidateKey","tableId","tableName","baseId","indexName","indexKind","accessPath","semantics","provider","operatorClass","minimumProbeLength","searchedFieldIds","coveredFields","scopeHeat","planEvidence","nextAction"]}},"coverageReport":{"type":"object","properties":{"scannedFieldCount":{"type":"number"},"coveredFieldCount":{"type":"number"},"skippedFieldCount":{"type":"number"},"skippedReasons":{"type":"object","additionalProperties":{"type":"number"}}},"required":["scannedFieldCount","coveredFieldCount","skippedFieldCount","skippedReasons"]}},"required":["scope","tableCount","searchProbeLengthBucket","scannedFieldCount","coveredFieldCount","skippedFieldCount","recommendations","scopeHeatReports","scopedExpressionRecommendations","coverageReport"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/table-query-ops/search-vectors/analyze \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"baseId\":\"string\",\"tableId\":\"string\",\"fieldIds\":\"string\",\"provider\":\"pg_bigm\",\"searchProbe\":\"string\",\"includeResultSamples\":true,\"sampleResultLimit\":3,\"maxRecommendations\":1}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/table-query-ops/search-vectors/analyze';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"baseId\":\"string\",\"tableId\":\"string\",\"fieldIds\":\"string\",\"provider\":\"pg_bigm\",\"searchProbe\":\"string\",\"includeResultSamples\":true,\"sampleResultLimit\":3,\"maxRecommendations\":1}'\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/observability/table-query-ops/search-vectors/analyze',\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 spaceId: 'string',\n baseId: 'string',\n tableId: 'string',\n fieldIds: 'string',\n provider: 'pg_bigm',\n searchProbe: 'string',\n includeResultSamples: true,\n sampleResultLimit: 3,\n maxRecommendations: 1\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"baseId\\\":\\\"string\\\",\\\"tableId\\\":\\\"string\\\",\\\"fieldIds\\\":\\\"string\\\",\\\"provider\\\":\\\"pg_bigm\\\",\\\"searchProbe\\\":\\\"string\\\",\\\"includeResultSamples\\\":true,\\\"sampleResultLimit\\\":3,\\\"maxRecommendations\\\":1}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/table-query-ops/search-vectors/analyze\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/table-query-ops/search-access-paths/execute":{"post":{"description":"Dry-run, create, or rebuild a generated text substring search access path\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tableId":{"type":"string","minLength":1},"mode":{"type":"string","enum":["create","rebuild","drop"],"default":"create"},"candidateKey":{"type":"string","minLength":1},"semantics":{"type":"string","enum":["substring"],"default":"substring"},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"fieldIds":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"searchProbe":{"type":"string"},"validationMode":{"type":"string","enum":["plan","real_ddl"],"default":"real_ddl"},"execute":{"type":"boolean","default":false},"allowLargeTableRewrite":{"type":"boolean","default":false},"requestId":{"type":"string","format":"uuid","description":"Reuse for retries; use a new ID for a newly reviewed operation"}},"required":["tableId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean"},"action":{"type":"string","enum":["dry_run","queued","failed"]},"result":{"nullable":true},"task":{"type":"object","properties":{"id":{"type":"string"},"recommendationId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"baseName":{"type":"string"},"tableName":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"attempts":{"type":"number"},"maxAttempts":{"type":"number"},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true},"lastError":{"type":"string","nullable":true},"result":{"nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","recommendationId","baseId","tableId","kind","status","attempts","maxAttempts"]},"error":{"type":"string"}},"required":["dryRun","action"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/table-query-ops/search-access-paths/execute \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"tableId\":\"string\",\"mode\":\"create\",\"candidateKey\":\"string\",\"semantics\":\"substring\",\"provider\":\"pg_bigm\",\"fieldIds\":\"string\",\"searchProbe\":\"string\",\"validationMode\":\"plan\",\"execute\":false,\"allowLargeTableRewrite\":false,\"requestId\":\"d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/table-query-ops/search-access-paths/execute';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"tableId\":\"string\",\"mode\":\"create\",\"candidateKey\":\"string\",\"semantics\":\"substring\",\"provider\":\"pg_bigm\",\"fieldIds\":\"string\",\"searchProbe\":\"string\",\"validationMode\":\"plan\",\"execute\":false,\"allowLargeTableRewrite\":false,\"requestId\":\"d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6\"}'\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/observability/table-query-ops/search-access-paths/execute',\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 tableId: 'string',\n mode: 'create',\n candidateKey: 'string',\n semantics: 'substring',\n provider: 'pg_bigm',\n fieldIds: 'string',\n searchProbe: 'string',\n validationMode: 'plan',\n execute: false,\n allowLargeTableRewrite: false,\n requestId: 'd385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"tableId\\\":\\\"string\\\",\\\"mode\\\":\\\"create\\\",\\\"candidateKey\\\":\\\"string\\\",\\\"semantics\\\":\\\"substring\\\",\\\"provider\\\":\\\"pg_bigm\\\",\\\"fieldIds\\\":\\\"string\\\",\\\"searchProbe\\\":\\\"string\\\",\\\"validationMode\\\":\\\"plan\\\",\\\"execute\\\":false,\\\"allowLargeTableRewrite\\\":false,\\\"requestId\\\":\\\"d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/table-query-ops/search-access-paths/execute\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/table-query-ops/search-vectors/execute":{"post":{"description":"Compatibility alias for substring search access-path execution\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tableId":{"type":"string","minLength":1},"mode":{"type":"string","enum":["create","rebuild","drop"],"default":"create"},"candidateKey":{"type":"string","minLength":1},"semantics":{"type":"string","enum":["substring"],"default":"substring"},"provider":{"type":"string","enum":["pg_bigm","pg_trgm"]},"fieldIds":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"searchProbe":{"type":"string"},"validationMode":{"type":"string","enum":["plan","real_ddl"],"default":"real_ddl"},"execute":{"type":"boolean","default":false},"allowLargeTableRewrite":{"type":"boolean","default":false},"requestId":{"type":"string","format":"uuid","description":"Reuse for retries; use a new ID for a newly reviewed operation"}},"required":["tableId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean"},"action":{"type":"string","enum":["dry_run","queued","failed"]},"result":{"nullable":true},"task":{"type":"object","properties":{"id":{"type":"string"},"recommendationId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"baseName":{"type":"string"},"tableName":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"attempts":{"type":"number"},"maxAttempts":{"type":"number"},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true},"lastError":{"type":"string","nullable":true},"result":{"nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","recommendationId","baseId","tableId","kind","status","attempts","maxAttempts"]},"error":{"type":"string"}},"required":["dryRun","action"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/table-query-ops/search-vectors/execute \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"tableId\":\"string\",\"mode\":\"create\",\"candidateKey\":\"string\",\"semantics\":\"substring\",\"provider\":\"pg_bigm\",\"fieldIds\":\"string\",\"searchProbe\":\"string\",\"validationMode\":\"plan\",\"execute\":false,\"allowLargeTableRewrite\":false,\"requestId\":\"d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/table-query-ops/search-vectors/execute';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"tableId\":\"string\",\"mode\":\"create\",\"candidateKey\":\"string\",\"semantics\":\"substring\",\"provider\":\"pg_bigm\",\"fieldIds\":\"string\",\"searchProbe\":\"string\",\"validationMode\":\"plan\",\"execute\":false,\"allowLargeTableRewrite\":false,\"requestId\":\"d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6\"}'\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/observability/table-query-ops/search-vectors/execute',\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 tableId: 'string',\n mode: 'create',\n candidateKey: 'string',\n semantics: 'substring',\n provider: 'pg_bigm',\n fieldIds: 'string',\n searchProbe: 'string',\n validationMode: 'plan',\n execute: false,\n allowLargeTableRewrite: false,\n requestId: 'd385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"tableId\\\":\\\"string\\\",\\\"mode\\\":\\\"create\\\",\\\"candidateKey\\\":\\\"string\\\",\\\"semantics\\\":\\\"substring\\\",\\\"provider\\\":\\\"pg_bigm\\\",\\\"fieldIds\\\":\\\"string\\\",\\\"searchProbe\\\":\\\"string\\\",\\\"validationMode\\\":\\\"plan\\\",\\\"execute\\\":false,\\\"allowLargeTableRewrite\\\":false,\\\"requestId\\\":\\\"d385ab22-0f51-4b97-9ecd-b8ff3fd4fcb6\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/table-query-ops/search-vectors/execute\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/table-query-ops/tables":{"get":{"description":"List current table search and index management state\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"q","in":"query"},{"schema":{"type":"string","enum":["all","attention","indexed","configured","unconfigured","unavailable"]},"required":false,"name":"state","in":"query"},{"schema":{"type":"string","enum":["slow","name"]},"required":false,"name":"sort","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":720},"required":false,"name":"lookbackHours","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Current table inventory","content":{"application/json":{"schema":{"type":"object","properties":{"tables":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"baseId":{"type":"string"},"baseName":{"type":"string"},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"estimatedRows":{"type":"number","nullable":true},"totalBytes":{"type":"number","nullable":true},"search":{"type":"object","properties":{"method":{"type":"string","enum":["pg_bigm","pg_trgm","ilike","unavailable"]},"runtimeEnabled":{"type":"boolean"},"configured":{"type":"boolean"},"indexState":{"type":"string","enum":["not_configured","pending_publication","ready","unusable"]},"configuredProvider":{"type":"string","nullable":true,"enum":["pg_bigm","pg_trgm"]},"coveredFieldCount":{"type":"number"},"eligibleFieldCount":{"type":"number"},"uncoveredFieldCount":{"type":"number"},"reason":{"type":"string"}},"required":["method","runtimeEnabled","configured","indexState","configuredProvider","coveredFieldCount","eligibleFieldCount","uncoveredFieldCount"]},"ordinaryIndexCount":{"type":"number","nullable":true},"pendingRecommendationCount":{"type":"number"},"activeTaskCount":{"type":"number"},"observation":{"type":"object","properties":{"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"maxDurationMs":{"type":"number"}},"required":["requestCount","slowCount","timeoutCount","maxDurationMs"]},"error":{"type":"string"}},"required":["tableId","tableName","baseId","baseName","spaceId","spaceName","estimatedRows","totalBytes","search","ordinaryIndexCount","pendingRecommendationCount","activeTaskCount","observation"]}},"total":{"type":"number"},"summary":{"type":"object","properties":{"tableCount":{"type":"number"},"indexedTableCount":{"type":"number"},"configuredTableCount":{"type":"number"},"unconfiguredTableCount":{"type":"number"},"unavailableTableCount":{"type":"number"},"attentionTableCount":{"type":"number"}},"required":["tableCount","indexedTableCount","configuredTableCount","unconfiguredTableCount","unavailableTableCount","attentionTableCount"]},"observationWindow":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"checkedAt":{"type":"string"}},"required":["tables","total","summary","observationWindow","checkedAt"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/table-query-ops/tables?q=SOME_STRING_VALUE&state=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&lookbackHours=SOME_INTEGER_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/observability/table-query-ops/tables?q=SOME_STRING_VALUE&state=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&lookbackHours=SOME_INTEGER_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/observability/table-query-ops/tables?q=SOME_STRING_VALUE&state=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&lookbackHours=SOME_INTEGER_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/observability/table-query-ops/tables?q=SOME_STRING_VALUE&state=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&lookbackHours=SOME_INTEGER_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/table-query-ops/tables/{tableId}":{"get":{"description":"Inspect current table indexes, coverage, recommendations and tasks\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":720},"required":false,"name":"lookbackHours","in":"query"}],"responses":{"200":{"description":"Current table state and history","content":{"application/json":{"schema":{"type":"object","properties":{"table":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"baseId":{"type":"string"},"baseName":{"type":"string"},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"estimatedRows":{"type":"number","nullable":true},"totalBytes":{"type":"number","nullable":true},"search":{"type":"object","properties":{"method":{"type":"string","enum":["pg_bigm","pg_trgm","ilike","unavailable"]},"runtimeEnabled":{"type":"boolean"},"configured":{"type":"boolean"},"indexState":{"type":"string","enum":["not_configured","pending_publication","ready","unusable"]},"configuredProvider":{"type":"string","nullable":true,"enum":["pg_bigm","pg_trgm"]},"coveredFieldCount":{"type":"number"},"eligibleFieldCount":{"type":"number"},"uncoveredFieldCount":{"type":"number"},"reason":{"type":"string"}},"required":["method","runtimeEnabled","configured","indexState","configuredProvider","coveredFieldCount","eligibleFieldCount","uncoveredFieldCount"]},"ordinaryIndexCount":{"type":"number","nullable":true},"pendingRecommendationCount":{"type":"number"},"activeTaskCount":{"type":"number"},"observation":{"type":"object","properties":{"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"maxDurationMs":{"type":"number"}},"required":["requestCount","slowCount","timeoutCount","maxDurationMs"]},"error":{"type":"string"}},"required":["tableId","tableName","baseId","baseName","spaceId","spaceName","estimatedRows","totalBytes","search","ordinaryIndexCount","pendingRecommendationCount","activeTaskCount","observation"]},"fields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"covered":{"type":"boolean"},"eligible":{"type":"boolean"},"reason":{"type":"string"}},"required":["fieldId","name","type","covered","eligible"]}},"indexes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"definition":{"type":"string"},"valid":{"type":"boolean"},"purpose":{"type":"string","enum":["search","filter_sort","system"]},"managed":{"type":"boolean"},"sizeBytes":{"type":"number"}},"required":["name","definition","valid","purpose","managed"]}},"recommendations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"baseName":{"type":"string"},"tableName":{"type":"string"},"executionTarget":{"type":"object","properties":{"storage":{"type":"string","enum":["default","byodb"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"}},"required":["storage"]},"shapeHash":{"type":"string"},"policyVersion":{"type":"string"},"status":{"type":"string","enum":["open","accepted","dismissed","superseded"]},"riskLevel":{"type":"string","enum":["none","low","medium","high","critical"]},"riskScore":{"type":"number"},"reasonCodes":{"type":"array","items":{"type":"string"}},"remediationKinds":{"type":"array","items":{"type":"string"}},"remediationCandidates":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"reason":{"type":"string"},"executableInPhase1":{"type":"boolean"},"fieldId":{"type":"string"},"fieldDbName":{"type":"string"},"indexKind":{"type":"string"},"accessPath":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldDbName":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"role":{"type":"string"}}}}},"required":["kind","reason","executableInPhase1"]}},"trigger":{"type":"object","properties":{"sourceKind":{"type":"string","enum":["saved_view_config","runtime_observation","relation_field_config","unknown"]},"sourceId":{"type":"string"},"viewId":{"type":"string"},"fingerprint":{"type":"string"},"observedWorkload":{"type":"boolean"}},"required":["sourceKind","observedWorkload"]},"shapeSummary":{"type":"object","properties":{"filterFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"operatorFamily":{"type":"string"},"sourceKind":{"type":"string"}},"required":["fieldId","operatorFamily"]}},"sortFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"systemColumn":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"source":{"type":"string"}},"required":["direction","source"]}},"search":{"type":"object","properties":{"fieldCount":{"type":"number"},"allFields":{"type":"boolean"},"valueLengthBucket":{"type":"string"}},"required":["fieldCount","allFields","valueLengthBucket"]}},"required":["filterFields","sortFields"]},"queryKind":{"type":"string"},"sqlDiagnostics":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"statementKind":{"type":"string"},"fingerprint":{"type":"string"},"parameterCount":{"type":"number"},"sampled":{"type":"boolean"},"normalizedSql":{"type":"string"}},"required":["source","statementKind","fingerprint","parameterCount","sampled"]}},"planValidation":{"type":"object","properties":{"status":{"type":"string","enum":["validated","skipped","failed"]},"method":{"type":"string","enum":["explain","hypothetical_index"]},"reason":{"type":"string"},"candidateCount":{"type":"number"},"startupCostBefore":{"type":"number"},"startupCostAfter":{"type":"number"},"totalCostBefore":{"type":"number"},"totalCostAfter":{"type":"number"},"planNodeBefore":{"type":"string"},"planNodeAfter":{"type":"string"},"usesCandidateIndex":{"type":"boolean"},"indexStatements":{"type":"array","items":{"type":"string"}},"errors":{"type":"array","items":{"type":"string"}}},"required":["status","candidateCount"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"priorityScore":{"type":"number"},"heat":{"type":"object","properties":{"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"totalDurationMs":{"type":"number"},"maxDurationMs":{"type":"number"},"estimatedRows":{"type":"number","nullable":true},"seqScanCount":{"type":"number"},"indexScanCount":{"type":"number"}},"required":["requestCount","slowCount","timeoutCount","totalDurationMs","maxDurationMs","estimatedRows"]},"decision":{"type":"object","properties":{"action":{"type":"string","enum":["auto_accept","hold","reclaim","noop"]},"actor":{"type":"string","enum":["system_policy","admin"]},"outcome":{"type":"string","enum":["pending","executed","post_verify_failed","skipped"]},"wouldAutoAccept":{"type":"boolean"},"reasonCodes":{"type":"array","items":{"type":"string"}},"cooldownUntil":{"type":"string"},"decidedAt":{"type":"string"}},"required":["action","actor","outcome","wouldAutoAccept","reasonCodes"]}},"required":["id","spaceId","baseId","tableId","executionTarget","shapeHash","policyVersion","status","riskLevel","riskScore","reasonCodes","remediationKinds","sqlDiagnostics","priorityScore"]}},"recommendationHistory":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"baseName":{"type":"string"},"tableName":{"type":"string"},"executionTarget":{"type":"object","properties":{"storage":{"type":"string","enum":["default","byodb"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"}},"required":["storage"]},"shapeHash":{"type":"string"},"policyVersion":{"type":"string"},"status":{"type":"string","enum":["open","accepted","dismissed","superseded"]},"riskLevel":{"type":"string","enum":["none","low","medium","high","critical"]},"riskScore":{"type":"number"},"reasonCodes":{"type":"array","items":{"type":"string"}},"remediationKinds":{"type":"array","items":{"type":"string"}},"remediationCandidates":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"reason":{"type":"string"},"executableInPhase1":{"type":"boolean"},"fieldId":{"type":"string"},"fieldDbName":{"type":"string"},"indexKind":{"type":"string"},"accessPath":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldDbName":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"role":{"type":"string"}}}}},"required":["kind","reason","executableInPhase1"]}},"trigger":{"type":"object","properties":{"sourceKind":{"type":"string","enum":["saved_view_config","runtime_observation","relation_field_config","unknown"]},"sourceId":{"type":"string"},"viewId":{"type":"string"},"fingerprint":{"type":"string"},"observedWorkload":{"type":"boolean"}},"required":["sourceKind","observedWorkload"]},"shapeSummary":{"type":"object","properties":{"filterFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"operatorFamily":{"type":"string"},"sourceKind":{"type":"string"}},"required":["fieldId","operatorFamily"]}},"sortFields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"systemColumn":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]},"source":{"type":"string"}},"required":["direction","source"]}},"search":{"type":"object","properties":{"fieldCount":{"type":"number"},"allFields":{"type":"boolean"},"valueLengthBucket":{"type":"string"}},"required":["fieldCount","allFields","valueLengthBucket"]}},"required":["filterFields","sortFields"]},"queryKind":{"type":"string"},"sqlDiagnostics":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"statementKind":{"type":"string"},"fingerprint":{"type":"string"},"parameterCount":{"type":"number"},"sampled":{"type":"boolean"},"normalizedSql":{"type":"string"}},"required":["source","statementKind","fingerprint","parameterCount","sampled"]}},"planValidation":{"type":"object","properties":{"status":{"type":"string","enum":["validated","skipped","failed"]},"method":{"type":"string","enum":["explain","hypothetical_index"]},"reason":{"type":"string"},"candidateCount":{"type":"number"},"startupCostBefore":{"type":"number"},"startupCostAfter":{"type":"number"},"totalCostBefore":{"type":"number"},"totalCostAfter":{"type":"number"},"planNodeBefore":{"type":"string"},"planNodeAfter":{"type":"string"},"usesCandidateIndex":{"type":"boolean"},"indexStatements":{"type":"array","items":{"type":"string"}},"errors":{"type":"array","items":{"type":"string"}}},"required":["status","candidateCount"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"priorityScore":{"type":"number"},"heat":{"type":"object","properties":{"requestCount":{"type":"number"},"slowCount":{"type":"number"},"timeoutCount":{"type":"number"},"totalDurationMs":{"type":"number"},"maxDurationMs":{"type":"number"},"estimatedRows":{"type":"number","nullable":true},"seqScanCount":{"type":"number"},"indexScanCount":{"type":"number"}},"required":["requestCount","slowCount","timeoutCount","totalDurationMs","maxDurationMs","estimatedRows"]},"decision":{"type":"object","properties":{"action":{"type":"string","enum":["auto_accept","hold","reclaim","noop"]},"actor":{"type":"string","enum":["system_policy","admin"]},"outcome":{"type":"string","enum":["pending","executed","post_verify_failed","skipped"]},"wouldAutoAccept":{"type":"boolean"},"reasonCodes":{"type":"array","items":{"type":"string"}},"cooldownUntil":{"type":"string"},"decidedAt":{"type":"string"}},"required":["action","actor","outcome","wouldAutoAccept","reasonCodes"]}},"required":["id","spaceId","baseId","tableId","executionTarget","shapeHash","policyVersion","status","riskLevel","riskScore","reasonCodes","remediationKinds","sqlDiagnostics","priorityScore"]}},"searchHistory":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"status":{"type":"string"},"fieldIds":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"string"}},"required":["provider","status","fieldIds"]}},"tasks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"recommendationId":{"type":"string","nullable":true},"baseId":{"type":"string"},"tableId":{"type":"string"},"baseName":{"type":"string"},"tableName":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"attempts":{"type":"number"},"maxAttempts":{"type":"number"},"lockedBy":{"type":"string","nullable":true},"lockedAt":{"type":"string","nullable":true},"lastError":{"type":"string","nullable":true},"result":{"nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","recommendationId","baseId","tableId","kind","status","attempts","maxAttempts"]}},"observationWindow":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"checkedAt":{"type":"string"},"historyTotals":{"type":"object","properties":{"recommendations":{"type":"number"},"tasks":{"type":"number"}},"required":["recommendations","tasks"]}},"required":["table","fields","indexes","recommendations","recommendationHistory","searchHistory","tasks","observationWindow","checkedAt"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/table-query-ops/tables/%7BtableId%7D?lookbackHours=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/table-query-ops/tables/%7BtableId%7D?lookbackHours=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/observability/table-query-ops/tables/%7BtableId%7D?lookbackHours=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/observability/table-query-ops/tables/%7BtableId%7D?lookbackHours=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox":{"get":{"description":"Get the current BullMQ and durable computed outbox health snapshot\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["0","1","true","false"],"description":"Force a fresh sample when 1/true. Cached samples are returned by default."},"required":false,"description":"Force a fresh sample when 1/true. Cached samples are returned by default.","name":"refresh","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","critical"]},"reasons":{"type":"array","items":{"type":"string","enum":["queue_unavailable","queue_paused","consumer_unavailable","failed_jobs","dead_letters","stale_processing","overdue_pending","paused_backlog","target_unavailable"]}},"sampledAt":{"type":"string"},"config":{"type":"object","properties":{"provider":{"type":"string","enum":["bullmq"]},"producerEnabled":{"type":"boolean"},"consumerEnabled":{"type":"boolean"},"monitorIntervalMs":{"type":"number"}},"required":["provider","producerEnabled","consumerEnabled","monitorIntervalMs"]},"queue":{"type":"object","properties":{"configured":{"type":"boolean"},"reachable":{"type":"boolean"},"isPaused":{"type":"boolean"},"workers":{"type":"number","nullable":true},"workerConcurrency":{"type":"object","properties":{"processDefault":{"type":"number"},"override":{"type":"number","nullable":true},"min":{"type":"number"},"max":{"type":"number"}},"required":["processDefault","override","min","max"]},"claimConcurrency":{"type":"object","properties":{"processDefault":{"type":"object","properties":{"perBase":{"type":"number"},"perSeedTable":{"type":"number"}},"required":["perBase","perSeedTable"]},"override":{"type":"object","properties":{"perBase":{"type":"number","nullable":true},"perSeedTable":{"type":"number","nullable":true}},"required":["perBase","perSeedTable"]},"min":{"type":"number"},"max":{"type":"number"}},"required":["processDefault","override","min","max"]},"waiting":{"type":"number"},"active":{"type":"number"},"delayed":{"type":"number"},"failed":{"type":"number"},"paused":{"type":"number"},"prioritized":{"type":"number"},"completed":{"type":"number"},"completedRetentionLimit":{"type":"number"},"failedRetentionLimit":{"type":"number"},"recentCompleted":{"type":"array","items":{"type":"object","properties":{"taskId":{"type":"string"},"baseId":{"type":"string"},"baseName":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"cause":{"type":"string","enum":["created","merged","retry","replay"]},"finishedAt":{"type":"string"},"processingDurationMs":{"type":"number"},"attemptsMade":{"type":"number"}},"required":["taskId","baseId","cause","finishedAt","attemptsMade"]}},"recentFailed":{"type":"array","items":{"type":"object","properties":{"taskId":{"type":"string"},"baseId":{"type":"string"},"baseName":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"cause":{"type":"string","enum":["created","merged","retry","replay"]},"failedAt":{"type":"string"},"failedReason":{"type":"string","nullable":true},"attemptsMade":{"type":"number"},"ledgerState":{"type":"string","enum":["pending","processing","dead","settled"]}},"required":["taskId","baseId","failedAt","failedReason","attemptsMade"]}},"error":{"type":"string"}},"required":["configured","reachable","workers","waiting","active","delayed","failed","paused","prioritized","completed","completedRetentionLimit","failedRetentionLimit","recentCompleted","recentFailed"]},"outbox":{"type":"object","properties":{"duePending":{"type":"number"},"scheduledPending":{"type":"number"},"pausedPending":{"type":"number"},"activeProcessing":{"type":"number"},"staleProcessing":{"type":"number"},"dead":{"type":"number"},"anomalyGroups":{"type":"number"},"oldestDueAgeMs":{"type":"number"},"oldestPausedAgeMs":{"type":"number"},"activePauseScopeCount":{"type":"number"},"targetCount":{"type":"number"},"unavailableTargetCount":{"type":"number"},"storage":{"type":"array","items":{"type":"object","properties":{"duePending":{"type":"number"},"scheduledPending":{"type":"number"},"pausedPending":{"type":"number"},"activeProcessing":{"type":"number"},"staleProcessing":{"type":"number"},"dead":{"type":"number"},"anomalyGroups":{"type":"number"},"oldestDueAgeMs":{"type":"number"},"oldestPausedAgeMs":{"type":"number"},"activePauseScopeCount":{"type":"number"},"storage":{"type":"string","enum":["default","byodb"]},"targetCount":{"type":"number"},"unavailableTargetCount":{"type":"number"}},"required":["duePending","scheduledPending","activeProcessing","staleProcessing","dead","oldestDueAgeMs","storage","targetCount","unavailableTargetCount"]}},"error":{"type":"string"}},"required":["duePending","scheduledPending","activeProcessing","staleProcessing","dead","oldestDueAgeMs","targetCount","unavailableTargetCount","storage"]},"pauses":{"type":"object","properties":{"activeScopeCount":{"type":"number"},"pausedPending":{"type":"number"},"oldestPausedAgeMs":{"type":"number"}},"required":["activeScopeCount","pausedPending","oldestPausedAgeMs"]},"dataDbHealth":{"type":"object","properties":{"unhealthyByodbConnections":{"type":"number"}},"required":["unhealthyByodbConnections"]},"activity":{"type":"object","properties":{"scope":{"type":"string","enum":["process"]},"lastPublishAt":{"type":"string"},"lastPublishResult":{"type":"string","enum":["accepted","error","timeout"]},"lastPublishCause":{"type":"string"},"lastConsumeAt":{"type":"string"},"lastConsumeOutcome":{"type":"string","enum":["processed","noop","deferred","parked","error","invalid"]},"lastDeliveryLagMs":{"type":"number"},"lastExecutionDurationMs":{"type":"number"}},"required":["scope"]}},"required":["status","reasons","sampledAt","config","queue","outbox","activity"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/computed-outbox?refresh=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox?refresh=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/computed-outbox?refresh=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/computed-outbox?refresh=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/anomalies":{"get":{"description":"List dead-letter and stale computed outbox tasks grouped by shared root-cause signature\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":30},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":500},"required":false,"name":"q","in":"query"},{"schema":{"type":"string","enum":["dead","stale"]},"required":false,"name":"kind","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"sampledAt":{"type":"string"},"total":{"type":"number"},"groupTotal":{"type":"number"},"matchedGroupTotal":{"type":"number"},"groups":{"type":"array","items":{"type":"object","properties":{"groupKey":{"type":"string"},"kind":{"type":"string","enum":["dead","stale"]},"targetId":{"type":"string"},"storage":{"type":"string","enum":["default","byodb"]},"baseId":{"type":"string"},"baseName":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"seedTableId":{"type":"string"},"lastError":{"type":"string","nullable":true},"errorSignature":{"type":"string","maxLength":500},"failedSql":{"type":"string","nullable":true},"failureKind":{"type":"string","nullable":true},"failurePhase":{"type":"string","nullable":true},"affectedTableName":{"type":"string","nullable":true},"count":{"type":"integer","minimum":0},"latestOccurredAt":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"targetId":{"type":"string"},"storage":{"type":"string","enum":["default","byodb"]},"kind":{"type":"string","enum":["dead","stale"]},"taskId":{"type":"string"},"baseId":{"type":"string"},"baseName":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"seedTableId":{"type":"string"},"attempts":{"type":"number"},"maxAttempts":{"type":"number"},"lastError":{"type":"string","nullable":true},"failedSql":{"type":"string","nullable":true},"failureKind":{"type":"string","nullable":true},"failurePhase":{"type":"string","nullable":true},"affectedTableName":{"type":"string","nullable":true},"occurredAt":{"type":"string"}},"required":["targetId","storage","kind","taskId","baseId","seedTableId","attempts","maxAttempts","lastError","occurredAt"]}},"targetHealth":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]}},"required":["groupKey","kind","targetId","storage","baseId","seedTableId","lastError","errorSignature","count","latestOccurredAt","items"]}},"unavailableTargetCount":{"type":"number"}},"required":["sampledAt","total","groupTotal","matchedGroupTotal","groups","unavailableTargetCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/computed-outbox/anomalies?limit=SOME_INTEGER_VALUE&q=SOME_STRING_VALUE&kind=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/anomalies?limit=SOME_INTEGER_VALUE&q=SOME_STRING_VALUE&kind=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/computed-outbox/anomalies?limit=SOME_INTEGER_VALUE&q=SOME_STRING_VALUE&kind=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/computed-outbox/anomalies?limit=SOME_INTEGER_VALUE&q=SOME_STRING_VALUE&kind=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/anomalies/{taskId}/recover":{"post":{"description":"Restore a dead-letter task or re-arm a stale task for BullMQ delivery\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"taskId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string","minLength":1,"maxLength":128},"kind":{"type":"string","enum":["dead","stale"]}},"required":["targetId","kind"]}}}},"responses":{"200":{"description":"Recovery accepted","content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string"},"kind":{"type":"string","enum":["dead","stale"]},"recovered":{"type":"boolean","enum":[true]},"delivery":{"type":"string","enum":["accepted","deferred"]}},"required":["taskId","kind","recovered","delivery"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/anomalies/%7BtaskId%7D/recover \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"targetId\":\"string\",\"kind\":\"dead\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/anomalies/%7BtaskId%7D/recover';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"targetId\":\"string\",\"kind\":\"dead\"}'\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/observability/computed-outbox/anomalies/%7BtaskId%7D/recover',\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({targetId: 'string', kind: 'dead'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"targetId\\\":\\\"string\\\",\\\"kind\\\":\\\"dead\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/anomalies/%7BtaskId%7D/recover\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/anomalies/recover-group":{"post":{"description":"Restore every current dead-letter task from one exact root-cause group\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string","minLength":1,"maxLength":128},"baseId":{"type":"string","minLength":1,"maxLength":128},"seedTableId":{"type":"string","minLength":1,"maxLength":128},"errorSignature":{"type":"string","maxLength":500}},"required":["targetId","baseId","seedTableId","errorSignature"]}}}},"responses":{"200":{"description":"Whole-group durable recovery summary","content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string"},"recovered":{"type":"integer","minimum":0},"inserted":{"type":"integer","minimum":0},"alreadyPending":{"type":"integer","minimum":0},"deliveryAccepted":{"type":"integer","minimum":0},"deliveryDeferred":{"type":"integer","minimum":0}},"required":["targetId","recovered","inserted","alreadyPending","deliveryAccepted","deliveryDeferred"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/anomalies/recover-group \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"targetId\":\"string\",\"baseId\":\"string\",\"seedTableId\":\"string\",\"errorSignature\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/anomalies/recover-group';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"targetId\":\"string\",\"baseId\":\"string\",\"seedTableId\":\"string\",\"errorSignature\":\"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/observability/computed-outbox/anomalies/recover-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({\n targetId: 'string',\n baseId: 'string',\n seedTableId: 'string',\n errorSignature: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"targetId\\\":\\\"string\\\",\\\"baseId\\\":\\\"string\\\",\\\"seedTableId\\\":\\\"string\\\",\\\"errorSignature\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/anomalies/recover-group\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/anomalies/discard-group":{"post":{"description":"Permanently drop every current dead-letter task from one exact root-cause group without replaying it (e.g. when the project no longer exists)\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string","minLength":1,"maxLength":128},"baseId":{"type":"string","minLength":1,"maxLength":128},"seedTableId":{"type":"string","minLength":1,"maxLength":128},"errorSignature":{"type":"string","maxLength":500}},"required":["targetId","baseId","seedTableId","errorSignature"]}}}},"responses":{"200":{"description":"Whole-group discard summary","content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string"},"discarded":{"type":"integer","minimum":0}},"required":["targetId","discarded"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/anomalies/discard-group \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"targetId\":\"string\",\"baseId\":\"string\",\"seedTableId\":\"string\",\"errorSignature\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/anomalies/discard-group';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"targetId\":\"string\",\"baseId\":\"string\",\"seedTableId\":\"string\",\"errorSignature\":\"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/observability/computed-outbox/anomalies/discard-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({\n targetId: 'string',\n baseId: 'string',\n seedTableId: 'string',\n errorSignature: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"targetId\\\":\\\"string\\\",\\\"baseId\\\":\\\"string\\\",\\\"seedTableId\\\":\\\"string\\\",\\\"errorSignature\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/anomalies/discard-group\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/queue/claim-concurrency":{"post":{"description":"Set or clear the cluster-wide outbox claim concurrency override (active processing tasks per project / per seed table). Primary-storage claim paths hot-apply it within seconds without a restart; BYODB projects keep their env defaults.\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"perBase":{"type":"integer","nullable":true,"minimum":1,"maximum":16},"perSeedTable":{"type":"integer","nullable":true,"minimum":1,"maximum":16}},"required":["perBase","perSeedTable"]}}}},"responses":{"200":{"description":"The resulting claim concurrency settings","content":{"application/json":{"schema":{"type":"object","properties":{"processDefault":{"type":"object","properties":{"perBase":{"type":"number"},"perSeedTable":{"type":"number"}},"required":["perBase","perSeedTable"]},"override":{"type":"object","properties":{"perBase":{"type":"number","nullable":true},"perSeedTable":{"type":"number","nullable":true}},"required":["perBase","perSeedTable"]},"effective":{"type":"object","properties":{"perBase":{"type":"number"},"perSeedTable":{"type":"number"}},"required":["perBase","perSeedTable"]},"min":{"type":"number"},"max":{"type":"number"}},"required":["processDefault","override","effective","min","max"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/queue/claim-concurrency \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"perBase\":1,\"perSeedTable\":1}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/queue/claim-concurrency';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"perBase\":1,\"perSeedTable\":1}'\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/observability/computed-outbox/queue/claim-concurrency',\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({perBase: 1, perSeedTable: 1}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"perBase\\\":1,\\\"perSeedTable\\\":1}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/queue/claim-concurrency\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/queue/clean-failed":{"post":{"description":"Clear retained failed BullMQ wake-up jobs from Redis. The durable outbox ledger is untouched: dead letters stay recoverable in the anomaly maintenance list.\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Number of failed jobs removed from the queue history","content":{"application/json":{"schema":{"type":"object","properties":{"cleaned":{"type":"number"}},"required":["cleaned"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/queue/clean-failed \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/queue/clean-failed';\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/computed-outbox/queue/clean-failed',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/computed-outbox/queue/clean-failed\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/pauses":{"get":{"description":"List active computed-update pauses across default and BYODB storage targets\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"sampledAt":{"type":"string"},"total":{"type":"integer","minimum":0},"unavailableTargetCount":{"type":"integer","minimum":0},"unavailableTargets":{"type":"array","items":{"type":"object","properties":{"targetId":{"type":"string"},"storage":{"type":"string","enum":["default","byodb"]},"error":{"type":"string"}},"required":["targetId","storage","error"]}},"scopes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"targetId":{"type":"string"},"storage":{"type":"string","enum":["default","byodb"]},"connectionId":{"type":"string","nullable":true},"scopeType":{"type":"string","enum":["space","base","table"]},"scopeId":{"type":"string"},"scopeName":{"type":"string","nullable":true},"baseId":{"type":"string","nullable":true},"baseName":{"type":"string","nullable":true},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"pausedAt":{"type":"string"},"pausedBy":{"type":"string","nullable":true},"resumeAt":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"writePolicy":{"type":"string","enum":["allow_bounded","block"]},"updatedAt":{"type":"string"},"updatedBy":{"type":"string","nullable":true}},"required":["id","targetId","storage","connectionId","scopeType","scopeId","scopeName","baseId","baseName","spaceId","spaceName","pausedAt","pausedBy","resumeAt","reason","writePolicy","updatedAt","updatedBy"]}}},"required":["sampledAt","total","unavailableTargetCount","unavailableTargets","scopes"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/pauses \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/pauses';\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/computed-outbox/pauses',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/computed-outbox/pauses\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Pause future computed task claims for a space in its currently routed data database\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","minLength":1,"maxLength":64},"reason":{"type":"string","maxLength":500},"durationMinutes":{"type":"integer","minimum":1,"maximum":120}},"required":["spaceId"]}}}},"responses":{"200":{"description":"Space pause created or replaced","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"targetId":{"type":"string"},"storage":{"type":"string","enum":["default","byodb"]},"connectionId":{"type":"string","nullable":true},"scopeType":{"type":"string","enum":["space","base","table"]},"scopeId":{"type":"string"},"scopeName":{"type":"string","nullable":true},"baseId":{"type":"string","nullable":true},"baseName":{"type":"string","nullable":true},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"pausedAt":{"type":"string"},"pausedBy":{"type":"string","nullable":true},"resumeAt":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"writePolicy":{"type":"string","enum":["allow_bounded","block"]},"updatedAt":{"type":"string"},"updatedBy":{"type":"string","nullable":true}},"required":["id","targetId","storage","connectionId","scopeType","scopeId","scopeName","baseId","baseName","spaceId","spaceName","pausedAt","pausedBy","resumeAt","reason","writePolicy","updatedAt","updatedBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/pauses \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"reason\":\"string\",\"durationMinutes\":1}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/pauses';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"reason\":\"string\",\"durationMinutes\":1}'\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/observability/computed-outbox/pauses',\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', reason: 'string', durationMinutes: 1}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"reason\\\":\\\"string\\\",\\\"durationMinutes\\\":1}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/pauses\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/pauses/spaces":{"get":{"description":"Find spaces that can be paused and report their current data-database route\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"required":true,"name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"spaceName":{"type":"string"},"storage":{"type":"string","enum":["default","byodb"]},"targetId":{"type":"string"},"bindingState":{"type":"string","nullable":true},"paused":{"type":"boolean"},"pauses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"targetId":{"type":"string"},"storage":{"type":"string","enum":["default","byodb"]},"connectionId":{"type":"string","nullable":true},"scopeType":{"type":"string","enum":["space","base","table"]},"scopeId":{"type":"string"},"scopeName":{"type":"string","nullable":true},"baseId":{"type":"string","nullable":true},"baseName":{"type":"string","nullable":true},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"pausedAt":{"type":"string"},"pausedBy":{"type":"string","nullable":true},"resumeAt":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"writePolicy":{"type":"string","enum":["allow_bounded","block"]},"updatedAt":{"type":"string"},"updatedBy":{"type":"string","nullable":true}},"required":["id","targetId","storage","connectionId","scopeType","scopeId","scopeName","baseId","baseName","spaceId","spaceName","pausedAt","pausedBy","resumeAt","reason","writePolicy","updatedAt","updatedBy"]}}},"required":["spaceId","spaceName","storage","targetId","bindingState","paused","pauses"]}}},"required":["spaces"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/computed-outbox/pauses/spaces?search=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/pauses/spaces?search=SOME_STRING_VALUE&limit=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/observability/computed-outbox/pauses/spaces?search=SOME_STRING_VALUE&limit=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/observability/computed-outbox/pauses/spaces?search=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/pauses/resume":{"post":{"description":"Remove one computed-update pause from its exact storage target\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string","minLength":1,"maxLength":128},"scopeType":{"type":"string","enum":["space","base","table"]},"scopeId":{"type":"string","minLength":1,"maxLength":128}},"required":["targetId","scopeType","scopeId"]}}}},"responses":{"200":{"description":"Resume result","content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string"},"scopeType":{"type":"string","enum":["space","base","table"]},"scopeId":{"type":"string"},"resumed":{"type":"boolean"}},"required":["targetId","scopeType","scopeId","resumed"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/pauses/resume \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"targetId\":\"string\",\"scopeType\":\"space\",\"scopeId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/pauses/resume';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"targetId\":\"string\",\"scopeType\":\"space\",\"scopeId\":\"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/observability/computed-outbox/pauses/resume',\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({targetId: 'string', scopeType: 'space', scopeId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"targetId\\\":\\\"string\\\",\\\"scopeType\\\":\\\"space\\\",\\\"scopeId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/pauses/resume\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/pauses/extend":{"post":{"description":"Extend one active computed-update pause lease in its exact storage target without shortening it\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string","minLength":1,"maxLength":128},"leaseId":{"type":"string","minLength":1,"maxLength":128},"durationMinutes":{"type":"integer","minimum":1,"maximum":120}},"required":["targetId","leaseId","durationMinutes"]}}}},"responses":{"200":{"description":"Extended pause lease","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"targetId":{"type":"string"},"storage":{"type":"string","enum":["default","byodb"]},"connectionId":{"type":"string","nullable":true},"scopeType":{"type":"string","enum":["space","base","table"]},"scopeId":{"type":"string"},"scopeName":{"type":"string","nullable":true},"baseId":{"type":"string","nullable":true},"baseName":{"type":"string","nullable":true},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"pausedAt":{"type":"string"},"pausedBy":{"type":"string","nullable":true},"resumeAt":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"writePolicy":{"type":"string","enum":["allow_bounded","block"]},"updatedAt":{"type":"string"},"updatedBy":{"type":"string","nullable":true}},"required":["id","targetId","storage","connectionId","scopeType","scopeId","scopeName","baseId","baseName","spaceId","spaceName","pausedAt","pausedBy","resumeAt","reason","writePolicy","updatedAt","updatedBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/pauses/extend \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"targetId\":\"string\",\"leaseId\":\"string\",\"durationMinutes\":1}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/pauses/extend';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"targetId\":\"string\",\"leaseId\":\"string\",\"durationMinutes\":1}'\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/observability/computed-outbox/pauses/extend',\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({targetId: 'string', leaseId: 'string', durationMinutes: 1}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"targetId\\\":\\\"string\\\",\\\"leaseId\\\":\\\"string\\\",\\\"durationMinutes\\\":1}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/pauses/extend\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/queue/jobs":{"get":{"description":"List BullMQ computed wake-up jobs by state with space/project/cause filters and pagination\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"states","in":"query"},{"schema":{"type":"string"},"required":false,"name":"spaceIds","in":"query"},{"schema":{"type":"string"},"required":false,"name":"baseIds","in":"query"},{"schema":{"type":"string"},"required":false,"name":"causes","in":"query"},{"schema":{"type":"string"},"required":false,"name":"outcomes","in":"query"},{"schema":{"type":"string","maxLength":200},"required":false,"name":"q","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"minDurationMs","in":"query"},{"schema":{"type":"string","enum":["tasks","deliveries"],"default":"tasks"},"required":false,"name":"view","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}]},"required":false,"name":"includeSettled","in":"query"},{"schema":{"type":"string","enum":["time","duration"],"default":"time"},"required":false,"name":"sort","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"sampledAt":{"type":"string"},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"},"jobs":{"type":"array","items":{"type":"object","properties":{"taskId":{"type":"string"},"baseId":{"type":"string"},"baseName":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"cause":{"type":"string","enum":["created","merged","retry","replay"]},"state":{"type":"string","enum":["waiting","active","delayed","failed","paused","prioritized","completed"]},"attemptsMade":{"type":"number"},"createdAt":{"type":"string"},"availableAt":{"type":"string"},"emittedAt":{"type":"string"},"scheduledFor":{"type":"string"},"startedAt":{"type":"string"},"finishedAt":{"type":"string"},"processingDurationMs":{"type":"number"},"failedReason":{"type":"string","nullable":true},"ledgerState":{"type":"string","enum":["pending","processing","dead","settled"]},"outcome":{"type":"string","enum":["processed","noop","deferred","parked"]},"deliveryCount":{"type":"number"}},"required":["taskId","baseId","state","attemptsMade","createdAt"]}},"scan":{"type":"array","items":{"type":"object","properties":{"state":{"type":"string","enum":["waiting","active","delayed","failed","paused","prioritized","completed"]},"scanned":{"type":"number"},"truncated":{"type":"boolean"},"missing":{"type":"number"}},"required":["state","scanned","truncated"]}},"facets":{"type":"object","properties":{"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"count":{"type":"number"}},"required":["id","count"]}},"bases":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"count":{"type":"number"},"spaceId":{"type":"string"}},"required":["id","count"]}},"causes":{"type":"array","items":{"type":"object","properties":{"cause":{"type":"string","enum":["created","merged","retry","replay"]},"count":{"type":"number"}},"required":["cause","count"]}},"outcomes":{"type":"array","items":{"type":"object","properties":{"outcome":{"type":"string","enum":["processed","noop","deferred","parked"]},"count":{"type":"number"}},"required":["outcome","count"]}}},"required":["spaces","bases","causes","outcomes"]},"hiddenSettled":{"type":"number"},"error":{"type":"string"}},"required":["sampledAt","total","limit","offset","jobs","scan","facets"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/computed-outbox/queue/jobs?states=SOME_STRING_VALUE&spaceIds=SOME_STRING_VALUE&baseIds=SOME_STRING_VALUE&causes=SOME_STRING_VALUE&outcomes=SOME_STRING_VALUE&q=SOME_STRING_VALUE&minDurationMs=SOME_INTEGER_VALUE&view=SOME_STRING_VALUE&includeSettled=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/queue/jobs?states=SOME_STRING_VALUE&spaceIds=SOME_STRING_VALUE&baseIds=SOME_STRING_VALUE&causes=SOME_STRING_VALUE&outcomes=SOME_STRING_VALUE&q=SOME_STRING_VALUE&minDurationMs=SOME_INTEGER_VALUE&view=SOME_STRING_VALUE&includeSettled=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=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/observability/computed-outbox/queue/jobs?states=SOME_STRING_VALUE&spaceIds=SOME_STRING_VALUE&baseIds=SOME_STRING_VALUE&causes=SOME_STRING_VALUE&outcomes=SOME_STRING_VALUE&q=SOME_STRING_VALUE&minDurationMs=SOME_INTEGER_VALUE&view=SOME_STRING_VALUE&includeSettled=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=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/observability/computed-outbox/queue/jobs?states=SOME_STRING_VALUE&spaceIds=SOME_STRING_VALUE&baseIds=SOME_STRING_VALUE&causes=SOME_STRING_VALUE&outcomes=SOME_STRING_VALUE&q=SOME_STRING_VALUE&minDurationMs=SOME_INTEGER_VALUE&view=SOME_STRING_VALUE&includeSettled=SOME_STRING_VALUE&sort=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/tasks/{taskId}/lineage":{"get":{"description":"Resolve one computed task's lineage: trigger source, run chain across the outbox / dead-letter / run-history ledgers, DAG plan (steps + edges), and source-change to converged-write latency\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"taskId","in":"path"}],"responses":{"200":{"description":"Lineage for the task and its run chain","content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string"},"storage":{"type":"string","enum":["default","byodb"]},"baseId":{"type":"string"},"baseName":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"task":{"type":"object","properties":{"taskId":{"type":"string"},"state":{"type":"string","enum":["pending","processing","dead","succeeded"]},"baseId":{"type":"string"},"seedTableId":{"type":"string"},"changeType":{"type":"string"},"runId":{"type":"string"},"originRunIds":{"type":"array","items":{"type":"string"}},"stageDepth":{"type":"number"},"predecessorTaskId":{"type":"string","nullable":true},"attempts":{"type":"number"},"estimatedComplexity":{"type":"number"},"runTotalSteps":{"type":"number"},"runCompletedStepsBefore":{"type":"number"},"syncMaxLevel":{"type":"number","nullable":true},"seedRecordCount":{"type":"number","nullable":true},"sourceFieldIds":{"type":"array","items":{"type":"string"}},"affectedFieldIds":{"type":"array","items":{"type":"string"}},"affectedTableIds":{"type":"array","items":{"type":"string"}},"sourceChangedAt":{"type":"string","nullable":true},"enqueuedAt":{"type":"string"},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"failedAt":{"type":"string","nullable":true},"durationMs":{"type":"number","nullable":true},"lastError":{"type":"string","nullable":true},"steps":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"fieldIds":{"type":"array","items":{"type":"string"}},"level":{"type":"number"}},"required":["tableId","fieldIds","level"]}},"edges":{"type":"array","items":{"type":"object","properties":{"fromFieldId":{"type":"string"},"toFieldId":{"type":"string"},"fromTableId":{"type":"string"},"toTableId":{"type":"string"},"linkFieldId":{"type":"string"},"propagationMode":{"type":"string"},"order":{"type":"number"}},"required":["fromFieldId","toFieldId","fromTableId","toTableId","order"]}}},"required":["taskId","state","baseId","seedTableId","changeType","runId","originRunIds","stageDepth","predecessorTaskId","attempts","estimatedComplexity","runTotalSteps","runCompletedStepsBefore","syncMaxLevel","seedRecordCount","sourceFieldIds","affectedFieldIds","affectedTableIds","sourceChangedAt","enqueuedAt","startedAt","completedAt","failedAt","durationMs","lastError","steps","edges"]},"runChain":{"type":"array","items":{"type":"object","properties":{"taskId":{"type":"string"},"state":{"type":"string","enum":["pending","processing","dead","succeeded"]},"baseId":{"type":"string"},"seedTableId":{"type":"string"},"changeType":{"type":"string"},"runId":{"type":"string"},"originRunIds":{"type":"array","items":{"type":"string"}},"stageDepth":{"type":"number"},"predecessorTaskId":{"type":"string","nullable":true},"attempts":{"type":"number"},"estimatedComplexity":{"type":"number"},"runTotalSteps":{"type":"number"},"runCompletedStepsBefore":{"type":"number"},"syncMaxLevel":{"type":"number","nullable":true},"seedRecordCount":{"type":"number","nullable":true},"sourceFieldIds":{"type":"array","items":{"type":"string"}},"affectedFieldIds":{"type":"array","items":{"type":"string"}},"affectedTableIds":{"type":"array","items":{"type":"string"}},"sourceChangedAt":{"type":"string","nullable":true},"enqueuedAt":{"type":"string"},"startedAt":{"type":"string","nullable":true},"completedAt":{"type":"string","nullable":true},"failedAt":{"type":"string","nullable":true},"durationMs":{"type":"number","nullable":true},"lastError":{"type":"string","nullable":true},"steps":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"fieldIds":{"type":"array","items":{"type":"string"}},"level":{"type":"number"}},"required":["tableId","fieldIds","level"]}},"edges":{"type":"array","items":{"type":"object","properties":{"fromFieldId":{"type":"string"},"toFieldId":{"type":"string"},"fromTableId":{"type":"string"},"toTableId":{"type":"string"},"linkFieldId":{"type":"string"},"propagationMode":{"type":"string"},"order":{"type":"number"}},"required":["fromFieldId","toFieldId","fromTableId","toTableId","order"]}}},"required":["taskId","state","baseId","seedTableId","changeType","runId","originRunIds","stageDepth","predecessorTaskId","attempts","estimatedComplexity","runTotalSteps","runCompletedStepsBefore","syncMaxLevel","seedRecordCount","sourceFieldIds","affectedFieldIds","affectedTableIds","sourceChangedAt","enqueuedAt","startedAt","completedAt","failedAt","durationMs","lastError","steps","edges"]}},"fields":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"fieldName":{"type":"string"},"fieldType":{"type":"string"},"isLookup":{"type":"boolean"},"tableId":{"type":"string"},"referencedFieldIds":{"type":"array","items":{"type":"string"}}},"required":["fieldId"]}},"tables":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"}},"required":["tableId"]}},"summary":{"type":"object","properties":{"sourceChangedAt":{"type":"string","nullable":true},"convergedAt":{"type":"string","nullable":true},"endToEndMs":{"type":"number","nullable":true},"live":{"type":"boolean"},"sourceFieldIds":{"type":"array","items":{"type":"string"}}},"required":["sourceChangedAt","convergedAt","endToEndMs","live","sourceFieldIds"]}},"required":["targetId","storage","baseId","task","runChain","fields","tables","summary"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/tasks/%7BtaskId%7D/lineage';\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/computed-outbox/tasks/%7BtaskId%7D/lineage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/computed-outbox/tasks/%7BtaskId%7D/lineage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/queue/worker-concurrency":{"post":{"description":"Set or clear the cluster-wide BullMQ worker concurrency override for computed wake-ups. Consumers hot-apply it within seconds without a restart.\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"concurrency":{"type":"integer","nullable":true,"minimum":1,"maximum":64}},"required":["concurrency"]}}}},"responses":{"200":{"description":"The resulting concurrency settings","content":{"application/json":{"schema":{"type":"object","properties":{"processDefault":{"type":"number"},"override":{"type":"number","nullable":true},"effective":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"}},"required":["processDefault","override","effective","min","max"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/queue/worker-concurrency \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"concurrency\":1}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/queue/worker-concurrency';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"concurrency\":1}'\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/observability/computed-outbox/queue/worker-concurrency',\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({concurrency: 1}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"concurrency\\\":1}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/queue/worker-concurrency\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/reliability":{"get":{"tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","maxLength":128},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Durable computation issues and migration readiness","content":{"application/json":{"schema":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"taskId":{"type":"string"},"baseId":{"type":"string"},"sourceTableId":{"type":"string"},"targetId":{"type":"string"},"status":{"type":"string","enum":["open","resolved","not_applicable"]},"scopeComplete":{"type":"boolean"},"failureKind":{"type":"string","nullable":true},"failurePhase":{"type":"string","nullable":true},"errorCode":{"type":"string","nullable":true},"error":{"type":"string"},"occurrences":{"type":"number"},"firstSeenAt":{"type":"string"},"lastSeenAt":{"type":"string"},"confirmedBy":{"type":"string","nullable":true},"confirmationReason":{"type":"string","nullable":true},"scopes":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"fieldId":{"type":"string"}},"required":["tableId","fieldId"]}}},"required":["id","taskId","baseId","sourceTableId","targetId","status","scopeComplete","error","occurrences","firstSeenAt","lastSeenAt","confirmedBy","confirmationReason","scopes"]}},"truncated":{"type":"boolean"},"targets":{"type":"array","items":{"type":"object","properties":{"targetId":{"type":"string"},"readiness":{"type":"string","enum":["ready","not_migrated","unavailable"]}},"required":["targetId","readiness"]}}},"required":["issues","targets"]}}}}},"description":"Required token scopes: `instance|read`","x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/computed-outbox/reliability?search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/reliability?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/observability/computed-outbox/reliability?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/observability/computed-outbox/reliability?search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/reliability/{issueId}":{"get":{"tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"issueId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"targetId","in":"query"}],"responses":{"200":{"description":"Persistent issue scope and administrator confirmation","content":{"application/json":{"schema":{"type":"object","properties":{"issue":{"type":"object","properties":{"id":{"type":"string"},"taskId":{"type":"string"},"baseId":{"type":"string"},"sourceTableId":{"type":"string"},"targetId":{"type":"string"},"status":{"type":"string","enum":["open","resolved","not_applicable"]},"scopeComplete":{"type":"boolean"},"failureKind":{"type":"string","nullable":true},"failurePhase":{"type":"string","nullable":true},"errorCode":{"type":"string","nullable":true},"error":{"type":"string"},"occurrences":{"type":"number"},"firstSeenAt":{"type":"string"},"lastSeenAt":{"type":"string"},"confirmedBy":{"type":"string","nullable":true},"confirmationReason":{"type":"string","nullable":true},"scopes":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"fieldId":{"type":"string"}},"required":["tableId","fieldId"]}}},"required":["id","taskId","baseId","sourceTableId","targetId","status","scopeComplete","error","occurrences","firstSeenAt","lastSeenAt","confirmedBy","confirmationReason","scopes"]},"canMarkNotApplicable":{"type":"boolean"}},"required":["issue"]}}}}},"description":"Required token scopes: `instance|read`","x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/computed-outbox/reliability/%7BissueId%7D?targetId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/reliability/%7BissueId%7D?targetId=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/computed-outbox/reliability/%7BissueId%7D?targetId=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/computed-outbox/reliability/%7BissueId%7D?targetId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/reliability/{issueId}/confirm":{"post":{"tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"issueId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string","minLength":1,"maxLength":128},"reason":{"type":"string","minLength":1,"maxLength":2000},"expectedLastSeenAt":{"type":"string","format":"date-time"},"expectedOccurrences":{"type":"integer","minimum":0,"exclusiveMinimum":true}},"required":["targetId","reason","expectedLastSeenAt","expectedOccurrences"]}}}},"responses":{"201":{"description":"Manually confirmed with audit reason"}},"description":"Required token scopes: `instance|update`","x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/reliability/%7BissueId%7D/confirm \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"targetId\":\"string\",\"reason\":\"string\",\"expectedLastSeenAt\":\"2019-08-24T14:15:22Z\",\"expectedOccurrences\":0}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/reliability/%7BissueId%7D/confirm';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"targetId\":\"string\",\"reason\":\"string\",\"expectedLastSeenAt\":\"2019-08-24T14:15:22Z\",\"expectedOccurrences\":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/admin/observability/computed-outbox/reliability/%7BissueId%7D/confirm',\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 targetId: 'string',\n reason: 'string',\n expectedLastSeenAt: '2019-08-24T14:15:22Z',\n expectedOccurrences: 0\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"targetId\\\":\\\"string\\\",\\\"reason\\\":\\\"string\\\",\\\"expectedLastSeenAt\\\":\\\"2019-08-24T14:15:22Z\\\",\\\"expectedOccurrences\\\":0}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/reliability/%7BissueId%7D/confirm\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/computed-outbox/reliability/{issueId}/not-applicable":{"post":{"tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"issueId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string","minLength":1,"maxLength":128},"reason":{"type":"string","minLength":1,"maxLength":2000},"expectedLastSeenAt":{"type":"string","format":"date-time"},"expectedOccurrences":{"type":"integer","minimum":0,"exclusiveMinimum":true}},"required":["targetId","reason","expectedLastSeenAt","expectedOccurrences"]}}}},"responses":{"201":{"description":"Closed with audit reason after confirming source table deletion"}},"description":"Required token scopes: `instance|update`","x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/computed-outbox/reliability/%7BissueId%7D/not-applicable \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"targetId\":\"string\",\"reason\":\"string\",\"expectedLastSeenAt\":\"2019-08-24T14:15:22Z\",\"expectedOccurrences\":0}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/computed-outbox/reliability/%7BissueId%7D/not-applicable';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"targetId\":\"string\",\"reason\":\"string\",\"expectedLastSeenAt\":\"2019-08-24T14:15:22Z\",\"expectedOccurrences\":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/admin/observability/computed-outbox/reliability/%7BissueId%7D/not-applicable',\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 targetId: 'string',\n reason: 'string',\n expectedLastSeenAt: '2019-08-24T14:15:22Z',\n expectedOccurrences: 0\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"targetId\\\":\\\"string\\\",\\\"reason\\\":\\\"string\\\",\\\"expectedLastSeenAt\\\":\\\"2019-08-24T14:15:22Z\\\",\\\"expectedOccurrences\\\":0}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/observability/computed-outbox/reliability/%7BissueId%7D/not-applicable\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/task-queue":{"get":{"description":"Get the AI field generation queue health snapshot with the per-space ranking\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["0","1","true","false"],"description":"Force a fresh sample when 1/true. Cached samples are returned by default."},"required":false,"description":"Force a fresh sample when 1/true. Cached samples are returned by default.","name":"refresh","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded"]},"reasons":{"type":"array","items":{"type":"string","enum":["stalled_runs","backlog_aging","high_failure_rate","slot_drift","orphan_backlog","watchdog_disabled"]}},"sampledAt":{"type":"string"},"config":{"type":"object","properties":{"topupWindowFactor":{"type":"number"},"stalledStalenessMs":{"type":"number"}},"required":["topupWindowFactor","stalledStalenessMs"]},"backlog":{"type":"object","properties":{"pending":{"type":"number"},"queued":{"type":"number"},"processing":{"type":"number"},"oldestPendingAgeMs":{"type":"number"},"orphanActive":{"type":"number"}},"required":["pending","queued","processing","oldestPendingAgeMs","orphanActive"]},"recent":{"type":"object","properties":{"windowMs":{"type":"number"},"succeeded":{"type":"number"},"failed":{"type":"number"},"skipped":{"type":"number"},"cancelled":{"type":"number"},"failureRate":{"type":"number"}},"required":["windowMs","succeeded","failed","skipped","cancelled","failureRate"]},"watchdog":{"type":"object","properties":{"disabled":{"type":"boolean"},"intervalMs":{"type":"number"},"lastRunAt":{"type":"string"},"lastResult":{"type":"object","properties":{"recovered":{"type":"number"},"finalized":{"type":"number"}},"required":["recovered","finalized"]}},"required":["disabled","intervalMs"]},"lastActivityAt":{"type":"string"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"pending":{"type":"number"},"queued":{"type":"number"},"processing":{"type":"number"},"oldestPendingAgeMs":{"type":"number"},"slotLimit":{"type":"number"},"slotHeld":{"type":"number","nullable":true},"drifted":{"type":"boolean"}},"required":["spaceId","spaceName","pending","queued","processing","oldestPendingAgeMs","slotLimit","slotHeld","drifted"]}},"spacesTruncated":{"type":"boolean"},"stalledCount":{"type":"number"}},"required":["status","reasons","sampledAt","config","backlog","recent","watchdog","spaces","spacesTruncated","stalledCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/task-queue?refresh=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/task-queue?refresh=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/task-queue?refresh=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/task-queue?refresh=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/task-queue/stalled":{"get":{"description":"List task runs stuck in Queued/Processing with a dead or absent BullMQ job\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"sampledAt":{"type":"string"},"total":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"runId":{"type":"string"},"taskId":{"type":"string"},"status":{"type":"string","enum":["queued","processing"]},"baseId":{"type":"string","nullable":true},"baseName":{"type":"string","nullable":true},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"stalledForMs":{"type":"number"},"jobState":{"type":"string","nullable":true},"recoverable":{"type":"boolean"},"errorMsg":{"type":"string","nullable":true}},"required":["runId","taskId","status","baseId","baseName","spaceId","spaceName","stalledForMs","jobState","recoverable","errorMsg"]}}},"required":["sampledAt","total","items"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/observability/task-queue/stalled \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/task-queue/stalled';\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/task-queue/stalled',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/task-queue/stalled\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/task-queue/spaces/{spaceId}/tasks":{"get":{"description":"List the in-flight AI generation tasks of a space\n\nRequired token scopes: `instance|read`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"sampledAt":{"type":"string"},"total":{"type":"number"},"tasks":{"type":"array","items":{"type":"object","properties":{"taskId":{"type":"string"},"type":{"type":"string"},"status":{"type":"string"},"tableId":{"type":"string","nullable":true},"tableName":{"type":"string","nullable":true},"baseId":{"type":"string","nullable":true},"baseName":{"type":"string","nullable":true},"createdBy":{"type":"string"},"createdByName":{"type":"string","nullable":true},"createdTime":{"type":"string"},"runs":{"type":"object","properties":{"pending":{"type":"number"},"queued":{"type":"number"},"processing":{"type":"number"}},"required":["pending","queued","processing"]},"uncreatedRuns":{"type":"number"},"totalRuns":{"type":"number","nullable":true},"lastError":{"type":"string","nullable":true}},"required":["taskId","type","status","tableId","tableName","baseId","baseName","createdBy","createdByName","createdTime","runs","uncreatedRuns","totalRuns","lastError"]}}},"required":["sampledAt","total","tasks"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/task-queue/spaces/%7BspaceId%7D/tasks?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/observability/task-queue/spaces/%7BspaceId%7D/tasks?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/observability/task-queue/spaces/%7BspaceId%7D/tasks?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/observability/task-queue/spaces/%7BspaceId%7D/tasks?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/task-queue/tasks/{taskId}/cancel":{"post":{"description":"Cancel one AI generation task and every run of it that is not yet terminal\n\nRequired token scopes: `instance|update`","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"taskId","in":"path"}],"responses":{"200":{"description":"Cancellation applied","content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string"},"cancelled":{"type":"boolean"}},"required":["taskId","cancelled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/task-queue/tasks/%7BtaskId%7D/cancel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/task-queue/tasks/%7BtaskId%7D/cancel';\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/task-queue/tasks/%7BtaskId%7D/cancel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/task-queue/tasks/%7BtaskId%7D/cancel\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/sessions":{"get":{"description":"List sandbox sessions (admin)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"status","in":"query"},{"schema":{"type":"string"},"required":false,"name":"providerType","in":"query"},{"schema":{"type":"string"},"required":false,"name":"principalId","in":"query"},{"schema":{"type":"string","enum":["app","user"]},"required":false,"name":"principalType","in":"query"},{"schema":{"type":"string"},"required":false,"name":"sandboxId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":false,"name":"endDate","in":"query"},{"schema":{"type":"string"},"required":false,"name":"sortBy","in":"query"},{"schema":{"type":"string"},"required":false,"name":"sortOrder","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"limit","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"Paginated list of sandbox sessions","content":{"application/json":{"schema":{"type":"object","properties":{"sessions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"principalId":{"type":"string"},"principalType":{"type":"string"},"sandboxId":{"type":"string"},"providerType":{"type":"string"},"status":{"type":"string"},"destroyReason":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastActivityTime":{"type":"string"},"destroyedTime":{"type":"string","nullable":true},"sessionDataPath":{"type":"string","nullable":true},"sandboxDomain":{"type":"string"},"remainingMs":{"type":"number"},"metadata":{"type":"object","nullable":true,"properties":{"image":{"type":"string"}}}},"required":["id","principalId","principalType","sandboxId","providerType","status","destroyReason","createdTime","lastActivityTime","destroyedTime","sessionDataPath"]}},"total":{"type":"number"},"hasMore":{"type":"boolean"}},"required":["sessions","total","hasMore"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/sandbox/sessions?status=SOME_STRING_VALUE&providerType=SOME_STRING_VALUE&principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE&sandboxId=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&sortBy=SOME_STRING_VALUE&sortOrder=SOME_STRING_VALUE&limit=SOME_NUMBER_VALUE&offset=SOME_NUMBER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/sessions?status=SOME_STRING_VALUE&providerType=SOME_STRING_VALUE&principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE&sandboxId=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&sortBy=SOME_STRING_VALUE&sortOrder=SOME_STRING_VALUE&limit=SOME_NUMBER_VALUE&offset=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/sandbox/sessions?status=SOME_STRING_VALUE&providerType=SOME_STRING_VALUE&principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE&sandboxId=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&sortBy=SOME_STRING_VALUE&sortOrder=SOME_STRING_VALUE&limit=SOME_NUMBER_VALUE&offset=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/sandbox/sessions?status=SOME_STRING_VALUE&providerType=SOME_STRING_VALUE&principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE&sandboxId=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&sortBy=SOME_STRING_VALUE&sortOrder=SOME_STRING_VALUE&limit=SOME_NUMBER_VALUE&offset=SOME_NUMBER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/{principalId}":{"delete":{"description":"Destroy a sandbox by scope key (admin)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"principalId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"purge","in":"query"},{"schema":{"type":"string"},"required":false,"name":"force","in":"query"}],"responses":{"200":{"description":"Sandbox destroyed with operation details","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"providerStopped":{"type":"boolean"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/admin/sandbox/%7BprincipalId%7D?purge=SOME_STRING_VALUE&force=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/%7BprincipalId%7D?purge=SOME_STRING_VALUE&force=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/admin/sandbox/%7BprincipalId%7D?purge=SOME_STRING_VALUE&force=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/admin/sandbox/%7BprincipalId%7D?purge=SOME_STRING_VALUE&force=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/destroy-batch":{"post":{"description":"Destroy sandboxes in bulk by filter (admin)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"principalType":{"type":"string","enum":["app","user"]},"status":{"type":"string"},"purge":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Aggregate destroy result","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number"},"succeeded":{"type":"number"},"failed":{"type":"array","items":{"type":"object","properties":{"principalId":{"type":"string"},"error":{"type":"string"}},"required":["principalId","error"]}}},"required":["total","succeeded","failed"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/sandbox/destroy-batch \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"principalType\":\"app\",\"status\":\"string\",\"purge\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/destroy-batch';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"principalType\":\"app\",\"status\":\"string\",\"purge\":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/sandbox/destroy-batch',\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({principalType: 'app', status: 'string', purge: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"principalType\\\":\\\"app\\\",\\\"status\\\":\\\"string\\\",\\\"purge\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/sandbox/destroy-batch\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/sessions/{principalId}/chats":{"get":{"description":"List all chats for a sandbox principal (admin)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"principalId","in":"path"}],"responses":{"200":{"description":"Chat list for the principal","content":{"application/json":{"schema":{"type":"object","properties":{"chats":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"type":{"type":"string"},"createdTime":{"type":"string"},"messageCount":{"type":"number"}},"required":["id","name","type","createdTime","messageCount"]}}},"required":["chats"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/sandbox/sessions/%7BprincipalId%7D/chats \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/sessions/%7BprincipalId%7D/chats';\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/sandbox/sessions/%7BprincipalId%7D/chats',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/sandbox/sessions/%7BprincipalId%7D/chats\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/sessions/{principalId}/messages":{"get":{"description":"Get chat messages for a sandbox principal (admin)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"principalId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"before","in":"query"},{"schema":{"type":"string"},"required":false,"name":"chatId","in":"query"}],"responses":{"200":{"description":"Chat messages for the principal","content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"chatId":{"type":"string"},"role":{"type":"string"},"parts":{"type":"array","items":{"nullable":true}},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"metadata":{"nullable":true}},"required":["id","chatId","role","parts","createdTime","createdBy"]}},"hasMore":{"type":"boolean"}},"required":["messages"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/sandbox/sessions/%7BprincipalId%7D/messages?limit=SOME_NUMBER_VALUE&before=SOME_STRING_VALUE&chatId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/sessions/%7BprincipalId%7D/messages?limit=SOME_NUMBER_VALUE&before=SOME_STRING_VALUE&chatId=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/sandbox/sessions/%7BprincipalId%7D/messages?limit=SOME_NUMBER_VALUE&before=SOME_STRING_VALUE&chatId=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/sandbox/sessions/%7BprincipalId%7D/messages?limit=SOME_NUMBER_VALUE&before=SOME_STRING_VALUE&chatId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/{sandboxId}/observability/stream":{"get":{"description":"Stream sandbox observability metrics over SSE (admin)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"sandboxId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"intervalMs","in":"query"}],"responses":{"200":{"description":"Server-sent sandbox metrics stream","content":{"text/event-stream":{"schema":{"type":"string"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/sandbox/%7BsandboxId%7D/observability/stream?intervalMs=SOME_NUMBER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/%7BsandboxId%7D/observability/stream?intervalMs=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/sandbox/%7BsandboxId%7D/observability/stream?intervalMs=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/sandbox/%7BsandboxId%7D/observability/stream?intervalMs=SOME_NUMBER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/infra-status":{"get":{"description":"Get sandbox infra connectivity/compatibility diagnostics (admin)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Current infra doctor status","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string"},"configured":{"type":"boolean"},"infraApiUrl":{"type":"string","nullable":true},"agentImage":{"type":"string","nullable":true},"requiredCapabilities":{"type":"array","items":{"type":"string"}},"meta":{"type":"object","properties":{"state":{"type":"string","enum":["pending","ok","error","unsupported","skipped"]},"layer":{"type":"string","enum":["dns","connect","tls","auth","api","compat"]},"message":{"type":"string"},"version":{"type":"string"},"capabilities":{"type":"array","items":{"type":"string"}},"missingCapabilities":{"type":"array","items":{"type":"string"}},"opensandboxServerVersion":{"type":"string"},"advisories":{"type":"array","items":{"type":"string"}},"checkedAt":{"type":"string"}},"required":["state"]},"preheat":{"type":"object","properties":{"state":{"type":"string","enum":["idle","pending","ok","error","skipped","skipped-dev"]},"layer":{"type":"string","enum":["dns","connect","tls","auth","api","compat"]},"message":{"type":"string"},"image":{"type":"string"},"attempts":{"type":"number"},"checkedAt":{"type":"string"}},"required":["state"]}},"required":["provider","configured","infraApiUrl","agentImage","requiredCapabilities","meta","preheat"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/sandbox/infra-status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/infra-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/sandbox/infra-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/sandbox/infra-status\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/infra-test/preheat":{"post":{"description":"Trigger an agent image preheat on the infra (admin live test step 1)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Preheat request outcome","content":{"application/json":{"schema":{"type":"object","properties":{"state":{"type":"string","enum":["idle","pending","ok","error","skipped","skipped-dev"]},"layer":{"type":"string","enum":["dns","connect","tls","auth","api","compat"]},"message":{"type":"string"},"image":{"type":"string"},"attempts":{"type":"number"},"checkedAt":{"type":"string"}},"required":["state"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/sandbox/infra-test/preheat \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/infra-test/preheat';\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/sandbox/infra-test/preheat',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/sandbox/infra-test/preheat\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/infra-test/preheat-readiness":{"get":{"description":"Poll agent image preheat readiness on the infra (admin live test step 2)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Reduced preheat readiness","content":{"application/json":{"schema":{"type":"object","properties":{"state":{"type":"string","enum":["pending","ready","failed","unknown"]},"message":{"type":"string"},"image":{"type":"string"},"desiredNodes":{"type":"number"},"readyNodes":{"type":"number"},"failedNodes":{"type":"number"}},"required":["state"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/sandbox/infra-test/preheat-readiness \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/infra-test/preheat-readiness';\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/sandbox/infra-test/preheat-readiness',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/sandbox/infra-test/preheat-readiness\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/sandbox/infra-test/chat":{"post":{"description":"Find or create the dedicated sandbox live-test chat for the current admin (in the most recently visited project) so a real conversation can be rendered inline (admin live test step 3)\n\nRequired token scopes: `instance|update`","tags":["admin","sandbox"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Target project/chat for the inline live-test conversation","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"message":{"type":"string"},"needsBase":{"type":"boolean"},"baseId":{"type":"string"},"chatId":{"type":"string"},"created":{"type":"boolean"}},"required":["ok"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/sandbox/infra-test/chat \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/sandbox/infra-test/chat';\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/sandbox/infra-test/chat',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/sandbox/infra-test/chat\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/app-ai-key-injection":{"get":{"description":"Get the platform AI key injection setting\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the resolved setting (defaults to enabled when never configured).","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/app-ai-key-injection \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/app-ai-key-injection';\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/app-ai-key-injection',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/app-ai-key-injection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update the platform AI key injection setting\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"Update the platform AI key injection setting successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/setting/app-ai-key-injection \\\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/admin/setting/app-ai-key-injection';\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/admin/setting/app-ai-key-injection',\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/admin/setting/app-ai-key-injection\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/sandbox":{"get":{"description":"Get the sandbox agent configuration\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the sandbox agent configuration.","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"models":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"default":{}},"streamIdleTimeout":{"type":"number","minimum":30,"maximum":1800,"default":900},"maxIdleTime":{"type":"number","minimum":60,"maximum":7200,"default":1800},"maxConcurrentChats":{"type":"number","minimum":1,"maximum":20,"default":3},"defaultEffort":{"type":"string","enum":["low","medium","high","xhigh"],"default":"medium"},"resources":{"type":"object","properties":{"cpu":{"type":"number","minimum":1,"maximum":8,"default":2},"memory":{"type":"number","minimum":1,"maximum":16,"default":4},"disk":{"type":"number","minimum":1,"maximum":64,"default":15}}},"infraConfigured":{"type":"boolean"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/sandbox \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/sandbox';\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/sandbox',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/sandbox\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update the sandbox agent configuration\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"models":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"default":{}},"streamIdleTimeout":{"type":"number","minimum":30,"maximum":1800,"default":900},"maxIdleTime":{"type":"number","minimum":60,"maximum":7200,"default":1800},"maxConcurrentChats":{"type":"number","minimum":1,"maximum":20,"default":3},"defaultEffort":{"type":"string","enum":["low","medium","high","xhigh"],"default":"medium"},"resources":{"type":"object","properties":{"cpu":{"type":"number","minimum":1,"maximum":8,"default":2},"memory":{"type":"number","minimum":1,"maximum":16,"default":4},"disk":{"type":"number","minimum":1,"maximum":64,"default":15}}}}}}}},"responses":{"200":{"description":"Update sandbox agent configuration successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/setting/sandbox \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"models\":{},\"streamIdleTimeout\":900,\"maxIdleTime\":1800,\"maxConcurrentChats\":3,\"defaultEffort\":\"low\",\"resources\":{\"cpu\":2,\"memory\":4,\"disk\":15}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/sandbox';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"models\":{},\"streamIdleTimeout\":900,\"maxIdleTime\":1800,\"maxConcurrentChats\":3,\"defaultEffort\":\"low\",\"resources\":{\"cpu\":2,\"memory\":4,\"disk\":15}}'\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/sandbox',\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 models: {},\n streamIdleTimeout: 900,\n maxIdleTime: 1800,\n maxConcurrentChats: 3,\n defaultEffort: 'low',\n resources: {cpu: 2, memory: 4, disk: 15}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"models\\\":{},\\\"streamIdleTimeout\\\":900,\\\"maxIdleTime\\\":1800,\\\"maxConcurrentChats\\\":3,\\\"defaultEffort\\\":\\\"low\\\",\\\"resources\\\":{\\\"cpu\\\":2,\\\"memory\\\":4,\\\"disk\\\":15}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/setting/sandbox\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/app-config/test-deploy":{"post":{"description":"Test connectivity of the selected app deployment provider\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["vercel","docker-runtime"]}},"required":["provider"]}}}},"responses":{"200":{"description":"Deployment provider connectivity result.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"layer":{"type":"string"},"message":{"type":"string"}},"required":["ok"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/setting/app-config/test-deploy \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"provider\":\"vercel\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/app-config/test-deploy';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"provider\":\"vercel\"}'\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/app-config/test-deploy',\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({provider: 'vercel'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"provider\\\":\\\"vercel\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/app-config/test-deploy\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/app-deploy-provider":{"get":{"description":"Get the effective app deploy provider for new deployments\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Effective app deploy provider.","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["vercel","docker-runtime"]},"source":{"type":"string","enum":["setting","env","default"]}},"required":["provider","source"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/app-deploy-provider \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/app-deploy-provider';\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/app-deploy-provider',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/app-deploy-provider\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/im":{"get":{"description":"Get the IM integration configuration\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the IM integration configuration.","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"telegram":{"type":"object","nullable":true,"properties":{"botToken":{"type":"string"},"botUsername":{"type":"string"}},"required":["botToken","botUsername"]},"feishu":{"type":"object","nullable":true,"properties":{"appId":{"type":"string"},"appSecret":{"type":"string"},"botName":{"type":"string"}},"required":["appId","appSecret"]},"slack":{"type":"object","nullable":true,"properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"},"signingSecret":{"type":"string"},"botName":{"type":"string"}},"required":["clientId","clientSecret","signingSecret"]}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/im \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/im';\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/im',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/im\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update the IM integration configuration\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"telegram":{"type":"object","nullable":true,"properties":{"botToken":{"type":"string"},"botUsername":{"type":"string"}},"required":["botToken","botUsername"]},"feishu":{"type":"object","nullable":true,"properties":{"appId":{"type":"string"},"appSecret":{"type":"string"},"botName":{"type":"string"}},"required":["appId","appSecret"]},"slack":{"type":"object","nullable":true,"properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"},"signingSecret":{"type":"string"},"botName":{"type":"string"}},"required":["clientId","clientSecret","signingSecret"]}}}}}},"responses":{"200":{"description":"Update IM configuration successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/setting/im \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"telegram\":{\"botToken\":\"string\",\"botUsername\":\"string\"},\"feishu\":{\"appId\":\"string\",\"appSecret\":\"string\",\"botName\":\"string\"},\"slack\":{\"clientId\":\"string\",\"clientSecret\":\"string\",\"signingSecret\":\"string\",\"botName\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/im';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"telegram\":{\"botToken\":\"string\",\"botUsername\":\"string\"},\"feishu\":{\"appId\":\"string\",\"appSecret\":\"string\",\"botName\":\"string\"},\"slack\":{\"clientId\":\"string\",\"clientSecret\":\"string\",\"signingSecret\":\"string\",\"botName\":\"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/im',\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 telegram: {botToken: 'string', botUsername: 'string'},\n feishu: {appId: 'string', appSecret: 'string', botName: 'string'},\n slack: {\n clientId: 'string',\n clientSecret: 'string',\n signingSecret: 'string',\n botName: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"telegram\\\":{\\\"botToken\\\":\\\"string\\\",\\\"botUsername\\\":\\\"string\\\"},\\\"feishu\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\",\\\"botName\\\":\\\"string\\\"},\\\"slack\\\":{\\\"clientId\\\":\\\"string\\\",\\\"clientSecret\\\":\\\"string\\\",\\\"signingSecret\\\":\\\"string\\\",\\\"botName\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/setting/im\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/app-archive-repair/repair-stream":{"post":{"description":"Stream app builder archive repair progress and results\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"SSE stream with app archive repair progress and results"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/setting/app-archive-repair/repair-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/app-archive-repair/repair-stream';\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/setting/app-archive-repair/repair-stream',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/setting/app-archive-repair/repair-stream\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/table-data-safety-limits":{"get":{"description":"Get the effective table data safety limits and plugin contributions\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns table data safety limit inspection data.","content":{"application/json":{"schema":{"type":"object","properties":{"plugins":{"type":"array","items":{"type":"string"}},"contributions":{"type":"array","items":{"type":"object","properties":{"pluginName":{"type":"string"},"limits":{"type":"object","properties":{"fieldOptions":{"type":"object","properties":{"maxBytes":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxSelectChoices":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxSelectChoiceNameLength":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxSelectDefaultValues":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"recordValues":{"type":"object","properties":{"maxCellValueBytes":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxRecordFieldsBytes":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxRecordsPerMutation":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"computed":{"type":"object","properties":{"maxComputedCellValueBytes":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxFormulaLength":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"tableSchema":{"type":"object","properties":{"maxTablesPerBase":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxFieldsPerTable":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxViewsPerTable":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxCreateTableFields":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxCreateTableViews":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxCreateTableRecords":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxRowsPerTable":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"viewConfig":{"type":"object","properties":{"maxFilterItems":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxFilterDepth":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxSortItems":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxGroupItems":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxOptionsBytes":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"displayText":{"type":"object","properties":{"maxNameLength":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxDescriptionLength":{"type":"number","minimum":0,"exclusiveMinimum":true}}}}}},"required":["pluginName","limits"]}},"composed":{"type":"object","properties":{"fieldOptions":{"type":"object","properties":{"maxBytes":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxSelectChoices":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxSelectChoiceNameLength":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxSelectDefaultValues":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"recordValues":{"type":"object","properties":{"maxCellValueBytes":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxRecordFieldsBytes":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxRecordsPerMutation":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"computed":{"type":"object","properties":{"maxComputedCellValueBytes":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxFormulaLength":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"tableSchema":{"type":"object","properties":{"maxTablesPerBase":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxFieldsPerTable":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxViewsPerTable":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxCreateTableFields":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxCreateTableViews":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxCreateTableRecords":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxRowsPerTable":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"viewConfig":{"type":"object","properties":{"maxFilterItems":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxFilterDepth":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxSortItems":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxGroupItems":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxOptionsBytes":{"type":"number","minimum":0,"exclusiveMinimum":true}}},"displayText":{"type":"object","properties":{"maxNameLength":{"type":"number","minimum":0,"exclusiveMinimum":true},"maxDescriptionLength":{"type":"number","minimum":0,"exclusiveMinimum":true}}}}},"resolved":{"type":"object","properties":{"fieldOptions":{"type":"object","properties":{"maxBytes":{"type":"number"},"maxSelectChoices":{"type":"number"},"maxSelectChoiceNameLength":{"type":"number"},"maxSelectDefaultValues":{"type":"number"}},"required":["maxBytes","maxSelectChoices","maxSelectChoiceNameLength","maxSelectDefaultValues"]},"recordValues":{"type":"object","properties":{"maxCellValueBytes":{"type":"number"},"maxRecordFieldsBytes":{"type":"number"},"maxRecordsPerMutation":{"type":"number"}},"required":["maxCellValueBytes","maxRecordFieldsBytes","maxRecordsPerMutation"]},"computed":{"type":"object","properties":{"maxComputedCellValueBytes":{"type":"number"},"maxFormulaLength":{"type":"number"}},"required":["maxComputedCellValueBytes","maxFormulaLength"]},"tableSchema":{"type":"object","properties":{"maxTablesPerBase":{"type":"number"},"maxFieldsPerTable":{"type":"number"},"maxViewsPerTable":{"type":"number"},"maxCreateTableFields":{"type":"number"},"maxCreateTableViews":{"type":"number"},"maxCreateTableRecords":{"type":"number"},"maxRowsPerTable":{"type":"number"}},"required":["maxTablesPerBase","maxFieldsPerTable","maxViewsPerTable","maxCreateTableFields","maxCreateTableViews","maxCreateTableRecords"]},"viewConfig":{"type":"object","properties":{"maxFilterItems":{"type":"number"},"maxFilterDepth":{"type":"number"},"maxSortItems":{"type":"number"},"maxGroupItems":{"type":"number"},"maxOptionsBytes":{"type":"number"}},"required":["maxFilterItems","maxFilterDepth","maxSortItems","maxGroupItems","maxOptionsBytes"]},"displayText":{"type":"object","properties":{"maxNameLength":{"type":"number"},"maxDescriptionLength":{"type":"number"}},"required":["maxNameLength","maxDescriptionLength"]}},"required":["fieldOptions","recordValues","computed","tableSchema","viewConfig","displayText"]},"rules":{"type":"array","items":{"type":"object","properties":{"group":{"type":"string"},"key":{"type":"string"},"envKey":{"type":"string"},"effectiveValue":{"type":"number"},"defaultValue":{"type":"number"},"sources":{"type":"array","items":{"type":"object","properties":{"pluginName":{"type":"string"},"value":{"type":"number"},"selected":{"type":"boolean"},"default":{"type":"boolean"}},"required":["pluginName","value","selected"]}}},"required":["group","key","sources"]}}},"required":["plugins","contributions","resolved","rules"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/table-data-safety-limits \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/table-data-safety-limits';\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/table-data-safety-limits',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/table-data-safety-limits\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/v2-rollout/jobs":{"post":{"description":"Create an EE v2 rollout job\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["prepare","switch","full"],"default":"prepare"},"mode":{"type":"string","enum":["dry_run","repair","switch_space","switch_global"],"default":"dry_run"},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"excludeSpaceIds":{"type":"array","items":{"type":"string"}},"excludeBaseIds":{"type":"array","items":{"type":"string"}},"sourceJobId":{"type":"string"},"concurrency":{"type":"integer","minimum":1,"maximum":8,"default":1},"autoStart":{"type":"boolean","default":true},"allowBlockedSwitch":{"type":"boolean","default":false},"forceNew":{"type":"boolean","default":false}}}}}},"responses":{"200":{"description":"Created v2 rollout job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["prepare","switch","full"]},"status":{"type":"string","enum":["pending","running","paused","completed","completed_with_blocks","failed","canceled"]},"phase":{"type":"string","nullable":true,"enum":["inventory","checking","repairing","verifying","switching"]},"mode":{"type":"string","enum":["dry_run","repair","switch_space","switch_global"]},"options":{"nullable":true},"totalSpaces":{"type":"number"},"totalBases":{"type":"number"},"readySpaces":{"type":"number"},"readyBases":{"type":"number"},"blockedSpaces":{"type":"number"},"blockedBases":{"type":"number"},"failedSpaces":{"type":"number"},"failedBases":{"type":"number"},"skippedSpaces":{"type":"number"},"skippedBases":{"type":"number"},"switchedSpaces":{"type":"number"},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true},"lastEventSeq":{"type":"number"}},"required":["id","type","status","mode","totalSpaces","totalBases","readySpaces","readyBases","blockedSpaces","blockedBases","failedSpaces","failedBases","skippedSpaces","skippedBases","switchedSpaces","createdTime","lastEventSeq"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/v2-rollout/jobs \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"prepare\",\"mode\":\"dry_run\",\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"excludeSpaceIds\":[\"string\"],\"excludeBaseIds\":[\"string\"],\"sourceJobId\":\"string\",\"concurrency\":1,\"autoStart\":true,\"allowBlockedSwitch\":false,\"forceNew\":false}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/v2-rollout/jobs';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"prepare\",\"mode\":\"dry_run\",\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"excludeSpaceIds\":[\"string\"],\"excludeBaseIds\":[\"string\"],\"sourceJobId\":\"string\",\"concurrency\":1,\"autoStart\":true,\"allowBlockedSwitch\":false,\"forceNew\":false}'\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/v2-rollout/jobs',\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: 'prepare',\n mode: 'dry_run',\n spaceIds: ['string'],\n baseIds: ['string'],\n excludeSpaceIds: ['string'],\n excludeBaseIds: ['string'],\n sourceJobId: 'string',\n concurrency: 1,\n autoStart: true,\n allowBlockedSwitch: false,\n forceNew: false\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"prepare\\\",\\\"mode\\\":\\\"dry_run\\\",\\\"spaceIds\\\":[\\\"string\\\"],\\\"baseIds\\\":[\\\"string\\\"],\\\"excludeSpaceIds\\\":[\\\"string\\\"],\\\"excludeBaseIds\\\":[\\\"string\\\"],\\\"sourceJobId\\\":\\\"string\\\",\\\"concurrency\\\":1,\\\"autoStart\\\":true,\\\"allowBlockedSwitch\\\":false,\\\"forceNew\\\":false}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/v2-rollout/jobs\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/v2-rollout/jobs/{jobId}":{"get":{"description":"Get an EE v2 rollout job detail\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"},{"schema":{"type":"boolean","default":true},"required":false,"name":"includeSpaces","in":"query"},{"schema":{"type":"boolean","default":true},"required":false,"name":"includeBases","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","running","ready","partial","blocked","failed","switched","skipped"]}},"required":false,"name":"spaceStatuses","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","checking","repairing","verifying","ready","blocked","failed","switched","skipped"]}},"required":false,"name":"baseStatuses","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"spaceSkip","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"baseSkip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500},"required":false,"name":"spaceTake","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500},"required":false,"name":"baseTake","in":"query"}],"responses":{"200":{"description":"V2 rollout job detail","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["prepare","switch","full"]},"status":{"type":"string","enum":["pending","running","paused","completed","completed_with_blocks","failed","canceled"]},"phase":{"type":"string","nullable":true,"enum":["inventory","checking","repairing","verifying","switching"]},"mode":{"type":"string","enum":["dry_run","repair","switch_space","switch_global"]},"options":{"nullable":true},"totalSpaces":{"type":"number"},"totalBases":{"type":"number"},"readySpaces":{"type":"number"},"readyBases":{"type":"number"},"blockedSpaces":{"type":"number"},"blockedBases":{"type":"number"},"failedSpaces":{"type":"number"},"failedBases":{"type":"number"},"skippedSpaces":{"type":"number"},"skippedBases":{"type":"number"},"switchedSpaces":{"type":"number"},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true},"lastEventSeq":{"type":"number"}},"required":["id","type","status","mode","totalSpaces","totalBases","readySpaces","readyBases","blockedSpaces","blockedBases","failedSpaces","failedBases","skippedSpaces","skippedBases","switchedSpaces","createdTime","lastEventSeq"]},"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"jobId":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"status":{"type":"string","enum":["pending","running","ready","partial","blocked","failed","switched","skipped"]},"totalBases":{"type":"number"},"readyBases":{"type":"number"},"blockedBases":{"type":"number"},"failedBases":{"type":"number"},"skippedBases":{"type":"number"},"switchedBases":{"type":"number"},"lastError":{"type":"string","nullable":true},"summary":{"nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true}},"required":["id","jobId","spaceId","status","totalBases","readyBases","blockedBases","failedBases","skippedBases","switchedBases","createdTime"]}},"bases":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"jobId":{"type":"string"},"spaceItemId":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"baseId":{"type":"string"},"baseName":{"type":"string","nullable":true},"status":{"type":"string","enum":["pending","checking","repairing","verifying","ready","blocked","failed","switched","skipped"]},"attemptCount":{"type":"number"},"lastError":{"type":"string","nullable":true},"checkSummary":{"nullable":true},"repairSummary":{"nullable":true},"verifySummary":{"nullable":true},"lastResults":{"nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true}},"required":["id","jobId","spaceItemId","spaceId","baseId","status","attemptCount","createdTime"]}},"spaceItemsTotal":{"type":"number"},"baseItemsTotal":{"type":"number"},"spaceStatusCounts":{"type":"object","additionalProperties":{"type":"number"}},"baseStatusCounts":{"type":"object","additionalProperties":{"type":"number"}}},"required":["job","spaces","bases"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D?includeSpaces=SOME_BOOLEAN_VALUE&includeBases=SOME_BOOLEAN_VALUE&spaceStatuses=SOME_ARRAY_VALUE&baseStatuses=SOME_ARRAY_VALUE&spaceSkip=SOME_INTEGER_VALUE&baseSkip=SOME_INTEGER_VALUE&spaceTake=SOME_INTEGER_VALUE&baseTake=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D?includeSpaces=SOME_BOOLEAN_VALUE&includeBases=SOME_BOOLEAN_VALUE&spaceStatuses=SOME_ARRAY_VALUE&baseStatuses=SOME_ARRAY_VALUE&spaceSkip=SOME_INTEGER_VALUE&baseSkip=SOME_INTEGER_VALUE&spaceTake=SOME_INTEGER_VALUE&baseTake=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/v2-rollout/jobs/%7BjobId%7D?includeSpaces=SOME_BOOLEAN_VALUE&includeBases=SOME_BOOLEAN_VALUE&spaceStatuses=SOME_ARRAY_VALUE&baseStatuses=SOME_ARRAY_VALUE&spaceSkip=SOME_INTEGER_VALUE&baseSkip=SOME_INTEGER_VALUE&spaceTake=SOME_INTEGER_VALUE&baseTake=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/v2-rollout/jobs/%7BjobId%7D?includeSpaces=SOME_BOOLEAN_VALUE&includeBases=SOME_BOOLEAN_VALUE&spaceStatuses=SOME_ARRAY_VALUE&baseStatuses=SOME_ARRAY_VALUE&spaceSkip=SOME_INTEGER_VALUE&baseSkip=SOME_INTEGER_VALUE&spaceTake=SOME_INTEGER_VALUE&baseTake=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/v2-rollout/jobs/latest":{"get":{"description":"Get the latest EE v2 rollout job detail\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"boolean","default":true},"required":false,"name":"includeSpaces","in":"query"},{"schema":{"type":"boolean","default":true},"required":false,"name":"includeBases","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","running","ready","partial","blocked","failed","switched","skipped"]}},"required":false,"name":"spaceStatuses","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["pending","checking","repairing","verifying","ready","blocked","failed","switched","skipped"]}},"required":false,"name":"baseStatuses","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"spaceSkip","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0,"default":0},"required":false,"name":"baseSkip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500},"required":false,"name":"spaceTake","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500},"required":false,"name":"baseTake","in":"query"}],"responses":{"200":{"description":"Latest v2 rollout job detail, or null when no jobs exist","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"job":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["prepare","switch","full"]},"status":{"type":"string","enum":["pending","running","paused","completed","completed_with_blocks","failed","canceled"]},"phase":{"type":"string","nullable":true,"enum":["inventory","checking","repairing","verifying","switching"]},"mode":{"type":"string","enum":["dry_run","repair","switch_space","switch_global"]},"options":{"nullable":true},"totalSpaces":{"type":"number"},"totalBases":{"type":"number"},"readySpaces":{"type":"number"},"readyBases":{"type":"number"},"blockedSpaces":{"type":"number"},"blockedBases":{"type":"number"},"failedSpaces":{"type":"number"},"failedBases":{"type":"number"},"skippedSpaces":{"type":"number"},"skippedBases":{"type":"number"},"switchedSpaces":{"type":"number"},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true},"lastEventSeq":{"type":"number"}},"required":["id","type","status","mode","totalSpaces","totalBases","readySpaces","readyBases","blockedSpaces","blockedBases","failedSpaces","failedBases","skippedSpaces","skippedBases","switchedSpaces","createdTime","lastEventSeq"]},"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"jobId":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"status":{"type":"string","enum":["pending","running","ready","partial","blocked","failed","switched","skipped"]},"totalBases":{"type":"number"},"readyBases":{"type":"number"},"blockedBases":{"type":"number"},"failedBases":{"type":"number"},"skippedBases":{"type":"number"},"switchedBases":{"type":"number"},"lastError":{"type":"string","nullable":true},"summary":{"nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true}},"required":["id","jobId","spaceId","status","totalBases","readyBases","blockedBases","failedBases","skippedBases","switchedBases","createdTime"]}},"bases":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"jobId":{"type":"string"},"spaceItemId":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string","nullable":true},"baseId":{"type":"string"},"baseName":{"type":"string","nullable":true},"status":{"type":"string","enum":["pending","checking","repairing","verifying","ready","blocked","failed","switched","skipped"]},"attemptCount":{"type":"number"},"lastError":{"type":"string","nullable":true},"checkSummary":{"nullable":true},"repairSummary":{"nullable":true},"verifySummary":{"nullable":true},"lastResults":{"nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true}},"required":["id","jobId","spaceItemId","spaceId","baseId","status","attemptCount","createdTime"]}},"spaceItemsTotal":{"type":"number"},"baseItemsTotal":{"type":"number"},"spaceStatusCounts":{"type":"object","additionalProperties":{"type":"number"}},"baseStatusCounts":{"type":"object","additionalProperties":{"type":"number"}}},"required":["job","spaces","bases"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/v2-rollout/jobs/latest?includeSpaces=SOME_BOOLEAN_VALUE&includeBases=SOME_BOOLEAN_VALUE&spaceStatuses=SOME_ARRAY_VALUE&baseStatuses=SOME_ARRAY_VALUE&spaceSkip=SOME_INTEGER_VALUE&baseSkip=SOME_INTEGER_VALUE&spaceTake=SOME_INTEGER_VALUE&baseTake=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/v2-rollout/jobs/latest?includeSpaces=SOME_BOOLEAN_VALUE&includeBases=SOME_BOOLEAN_VALUE&spaceStatuses=SOME_ARRAY_VALUE&baseStatuses=SOME_ARRAY_VALUE&spaceSkip=SOME_INTEGER_VALUE&baseSkip=SOME_INTEGER_VALUE&spaceTake=SOME_INTEGER_VALUE&baseTake=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/v2-rollout/jobs/latest?includeSpaces=SOME_BOOLEAN_VALUE&includeBases=SOME_BOOLEAN_VALUE&spaceStatuses=SOME_ARRAY_VALUE&baseStatuses=SOME_ARRAY_VALUE&spaceSkip=SOME_INTEGER_VALUE&baseSkip=SOME_INTEGER_VALUE&spaceTake=SOME_INTEGER_VALUE&baseTake=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/v2-rollout/jobs/latest?includeSpaces=SOME_BOOLEAN_VALUE&includeBases=SOME_BOOLEAN_VALUE&spaceStatuses=SOME_ARRAY_VALUE&baseStatuses=SOME_ARRAY_VALUE&spaceSkip=SOME_INTEGER_VALUE&baseSkip=SOME_INTEGER_VALUE&spaceTake=SOME_INTEGER_VALUE&baseTake=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/v2-rollout/jobs/{jobId}/events":{"get":{"description":"Get EE v2 rollout job events\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"afterSeq","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":200},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"V2 rollout events","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"jobId":{"type":"string"},"seq":{"type":"number"},"type":{"type":"string"},"level":{"type":"string","enum":["info","warn","error"]},"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string","nullable":true},"tableId":{"type":"string","nullable":true},"fieldId":{"type":"string","nullable":true},"ruleId":{"type":"string","nullable":true},"payload":{"nullable":true},"createdTime":{"type":"string"}},"required":["id","jobId","seq","type","level","createdTime"]}}},"required":["data"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/events?afterSeq=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/v2-rollout/jobs/%7BjobId%7D/events?afterSeq=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/v2-rollout/jobs/%7BjobId%7D/events?afterSeq=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/v2-rollout/jobs/%7BjobId%7D/events?afterSeq=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/v2-rollout/jobs/{jobId}/events-stream":{"get":{"description":"Stream EE v2 rollout job events with SSE\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"afterSeq","in":"query"}],"responses":{"200":{"description":"SSE stream with v2 rollout events"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/events-stream?afterSeq=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/events-stream?afterSeq=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/v2-rollout/jobs/%7BjobId%7D/events-stream?afterSeq=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/v2-rollout/jobs/%7BjobId%7D/events-stream?afterSeq=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/v2-rollout/jobs/{jobId}/pause":{"post":{"description":"Pause an EE v2 rollout job\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Updated v2 rollout job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["prepare","switch","full"]},"status":{"type":"string","enum":["pending","running","paused","completed","completed_with_blocks","failed","canceled"]},"phase":{"type":"string","nullable":true,"enum":["inventory","checking","repairing","verifying","switching"]},"mode":{"type":"string","enum":["dry_run","repair","switch_space","switch_global"]},"options":{"nullable":true},"totalSpaces":{"type":"number"},"totalBases":{"type":"number"},"readySpaces":{"type":"number"},"readyBases":{"type":"number"},"blockedSpaces":{"type":"number"},"blockedBases":{"type":"number"},"failedSpaces":{"type":"number"},"failedBases":{"type":"number"},"skippedSpaces":{"type":"number"},"skippedBases":{"type":"number"},"switchedSpaces":{"type":"number"},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true},"lastEventSeq":{"type":"number"}},"required":["id","type","status","mode","totalSpaces","totalBases","readySpaces","readyBases","blockedSpaces","blockedBases","failedSpaces","failedBases","skippedSpaces","skippedBases","switchedSpaces","createdTime","lastEventSeq"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/pause \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/pause';\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/v2-rollout/jobs/%7BjobId%7D/pause',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/v2-rollout/jobs/%7BjobId%7D/pause\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/v2-rollout/jobs/{jobId}/resume":{"post":{"description":"Resume an EE v2 rollout job\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Updated v2 rollout job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["prepare","switch","full"]},"status":{"type":"string","enum":["pending","running","paused","completed","completed_with_blocks","failed","canceled"]},"phase":{"type":"string","nullable":true,"enum":["inventory","checking","repairing","verifying","switching"]},"mode":{"type":"string","enum":["dry_run","repair","switch_space","switch_global"]},"options":{"nullable":true},"totalSpaces":{"type":"number"},"totalBases":{"type":"number"},"readySpaces":{"type":"number"},"readyBases":{"type":"number"},"blockedSpaces":{"type":"number"},"blockedBases":{"type":"number"},"failedSpaces":{"type":"number"},"failedBases":{"type":"number"},"skippedSpaces":{"type":"number"},"skippedBases":{"type":"number"},"switchedSpaces":{"type":"number"},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true},"lastEventSeq":{"type":"number"}},"required":["id","type","status","mode","totalSpaces","totalBases","readySpaces","readyBases","blockedSpaces","blockedBases","failedSpaces","failedBases","skippedSpaces","skippedBases","switchedSpaces","createdTime","lastEventSeq"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/resume \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/resume';\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/v2-rollout/jobs/%7BjobId%7D/resume',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/v2-rollout/jobs/%7BjobId%7D/resume\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/v2-rollout/jobs/{jobId}/cancel":{"post":{"description":"Cancel an EE v2 rollout job\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Updated v2 rollout job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["prepare","switch","full"]},"status":{"type":"string","enum":["pending","running","paused","completed","completed_with_blocks","failed","canceled"]},"phase":{"type":"string","nullable":true,"enum":["inventory","checking","repairing","verifying","switching"]},"mode":{"type":"string","enum":["dry_run","repair","switch_space","switch_global"]},"options":{"nullable":true},"totalSpaces":{"type":"number"},"totalBases":{"type":"number"},"readySpaces":{"type":"number"},"readyBases":{"type":"number"},"blockedSpaces":{"type":"number"},"blockedBases":{"type":"number"},"failedSpaces":{"type":"number"},"failedBases":{"type":"number"},"skippedSpaces":{"type":"number"},"skippedBases":{"type":"number"},"switchedSpaces":{"type":"number"},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true},"lastEventSeq":{"type":"number"}},"required":["id","type","status","mode","totalSpaces","totalBases","readySpaces","readyBases","blockedSpaces","blockedBases","failedSpaces","failedBases","skippedSpaces","skippedBases","switchedSpaces","createdTime","lastEventSeq"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/cancel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/cancel';\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/v2-rollout/jobs/%7BjobId%7D/cancel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/v2-rollout/jobs/%7BjobId%7D/cancel\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/v2-rollout/jobs/{jobId}/rollback":{"post":{"description":"Rollback spaces switched by an EE v2 rollout switch job\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Updated v2 rollout job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["prepare","switch","full"]},"status":{"type":"string","enum":["pending","running","paused","completed","completed_with_blocks","failed","canceled"]},"phase":{"type":"string","nullable":true,"enum":["inventory","checking","repairing","verifying","switching"]},"mode":{"type":"string","enum":["dry_run","repair","switch_space","switch_global"]},"options":{"nullable":true},"totalSpaces":{"type":"number"},"totalBases":{"type":"number"},"readySpaces":{"type":"number"},"readyBases":{"type":"number"},"blockedSpaces":{"type":"number"},"blockedBases":{"type":"number"},"failedSpaces":{"type":"number"},"failedBases":{"type":"number"},"skippedSpaces":{"type":"number"},"skippedBases":{"type":"number"},"switchedSpaces":{"type":"number"},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true},"lastEventSeq":{"type":"number"}},"required":["id","type","status","mode","totalSpaces","totalBases","readySpaces","readyBases","blockedSpaces","blockedBases","failedSpaces","failedBases","skippedSpaces","skippedBases","switchedSpaces","createdTime","lastEventSeq"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/rollback \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/v2-rollout/jobs/%7BjobId%7D/rollback';\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/v2-rollout/jobs/%7BjobId%7D/rollback',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/v2-rollout/jobs/%7BjobId%7D/rollback\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/system-field-backfill/jobs":{"post":{"description":"Create a system field backfill job that fills NULL __last_modified_time/__last_modified_by from created values\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean","default":false},"scope":{"type":"string","enum":["all","main","byodb"],"default":"all"},"chunkSize":{"type":"integer","minimum":100,"maximum":50000},"throttleMs":{"type":"integer","minimum":0,"maximum":10000}}}}}},"responses":{"200":{"description":"Created system field backfill job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","completed_with_errors","failed","canceled"]},"dryRun":{"type":"boolean"},"scope":{"type":"string","enum":["all","main","byodb"]},"totals":{"type":"object","properties":{"tablesScanned":{"type":"number"},"tablesAffected":{"type":"number"},"tablesFailed":{"type":"number"},"tablesSkipped":{"type":"number"},"rowsMatched":{"type":"number"},"rowsUpdated":{"type":"number"}},"required":["tablesScanned","tablesAffected","tablesFailed","tablesSkipped","rowsMatched","rowsUpdated"]},"checkpoint":{"type":"object","nullable":true,"properties":{"lastTableId":{"type":"string","nullable":true}},"required":["lastTableId"]},"events":{"type":"array","items":{"type":"object","properties":{"time":{"type":"string"},"level":{"type":"string","enum":["info","warn","error"]},"message":{"type":"string"}},"required":["time","level","message"]}},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true}},"required":["id","status","dryRun","scope","totals","checkpoint","events","error","createdBy","createdTime","startedTime","finishedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/system-field-backfill/jobs \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"dryRun\":false,\"scope\":\"all\",\"chunkSize\":100,\"throttleMs\":10000}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/system-field-backfill/jobs';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"dryRun\":false,\"scope\":\"all\",\"chunkSize\":100,\"throttleMs\":10000}'\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/system-field-backfill/jobs',\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({dryRun: false, scope: 'all', chunkSize: 100, throttleMs: 10000}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"dryRun\\\":false,\\\"scope\\\":\\\"all\\\",\\\"chunkSize\\\":100,\\\"throttleMs\\\":10000}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/system-field-backfill/jobs\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/system-field-backfill/jobs/latest":{"get":{"description":"Get the latest system field backfill job, or null when no jobs exist\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Latest system field backfill job","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","completed_with_errors","failed","canceled"]},"dryRun":{"type":"boolean"},"scope":{"type":"string","enum":["all","main","byodb"]},"totals":{"type":"object","properties":{"tablesScanned":{"type":"number"},"tablesAffected":{"type":"number"},"tablesFailed":{"type":"number"},"tablesSkipped":{"type":"number"},"rowsMatched":{"type":"number"},"rowsUpdated":{"type":"number"}},"required":["tablesScanned","tablesAffected","tablesFailed","tablesSkipped","rowsMatched","rowsUpdated"]},"checkpoint":{"type":"object","nullable":true,"properties":{"lastTableId":{"type":"string","nullable":true}},"required":["lastTableId"]},"events":{"type":"array","items":{"type":"object","properties":{"time":{"type":"string"},"level":{"type":"string","enum":["info","warn","error"]},"message":{"type":"string"}},"required":["time","level","message"]}},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true}},"required":["id","status","dryRun","scope","totals","checkpoint","events","error","createdBy","createdTime","startedTime","finishedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/system-field-backfill/jobs/latest \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/system-field-backfill/jobs/latest';\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/system-field-backfill/jobs/latest',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/system-field-backfill/jobs/latest\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/system-field-backfill/jobs/{jobId}":{"get":{"description":"Get a system field backfill job\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"System field backfill job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","completed_with_errors","failed","canceled"]},"dryRun":{"type":"boolean"},"scope":{"type":"string","enum":["all","main","byodb"]},"totals":{"type":"object","properties":{"tablesScanned":{"type":"number"},"tablesAffected":{"type":"number"},"tablesFailed":{"type":"number"},"tablesSkipped":{"type":"number"},"rowsMatched":{"type":"number"},"rowsUpdated":{"type":"number"}},"required":["tablesScanned","tablesAffected","tablesFailed","tablesSkipped","rowsMatched","rowsUpdated"]},"checkpoint":{"type":"object","nullable":true,"properties":{"lastTableId":{"type":"string","nullable":true}},"required":["lastTableId"]},"events":{"type":"array","items":{"type":"object","properties":{"time":{"type":"string"},"level":{"type":"string","enum":["info","warn","error"]},"message":{"type":"string"}},"required":["time","level","message"]}},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true}},"required":["id","status","dryRun","scope","totals","checkpoint","events","error","createdBy","createdTime","startedTime","finishedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/system-field-backfill/jobs/%7BjobId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/system-field-backfill/jobs/%7BjobId%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/system-field-backfill/jobs/%7BjobId%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/system-field-backfill/jobs/%7BjobId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/system-field-backfill/jobs/{jobId}/cancel":{"post":{"description":"Cancel a running system field backfill job\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Canceled system field backfill job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","completed_with_errors","failed","canceled"]},"dryRun":{"type":"boolean"},"scope":{"type":"string","enum":["all","main","byodb"]},"totals":{"type":"object","properties":{"tablesScanned":{"type":"number"},"tablesAffected":{"type":"number"},"tablesFailed":{"type":"number"},"tablesSkipped":{"type":"number"},"rowsMatched":{"type":"number"},"rowsUpdated":{"type":"number"}},"required":["tablesScanned","tablesAffected","tablesFailed","tablesSkipped","rowsMatched","rowsUpdated"]},"checkpoint":{"type":"object","nullable":true,"properties":{"lastTableId":{"type":"string","nullable":true}},"required":["lastTableId"]},"events":{"type":"array","items":{"type":"object","properties":{"time":{"type":"string"},"level":{"type":"string","enum":["info","warn","error"]},"message":{"type":"string"}},"required":["time","level","message"]}},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true}},"required":["id","status","dryRun","scope","totals","checkpoint","events","error","createdBy","createdTime","startedTime","finishedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/system-field-backfill/jobs/%7BjobId%7D/cancel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/system-field-backfill/jobs/%7BjobId%7D/cancel';\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/system-field-backfill/jobs/%7BjobId%7D/cancel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/system-field-backfill/jobs/%7BjobId%7D/cancel\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/system-field-backfill/jobs/{jobId}/resume":{"post":{"description":"Resume a failed or canceled system field backfill job from its checkpoint\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"jobId","in":"path"}],"responses":{"200":{"description":"Resumed system field backfill job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["pending","running","completed","completed_with_errors","failed","canceled"]},"dryRun":{"type":"boolean"},"scope":{"type":"string","enum":["all","main","byodb"]},"totals":{"type":"object","properties":{"tablesScanned":{"type":"number"},"tablesAffected":{"type":"number"},"tablesFailed":{"type":"number"},"tablesSkipped":{"type":"number"},"rowsMatched":{"type":"number"},"rowsUpdated":{"type":"number"}},"required":["tablesScanned","tablesAffected","tablesFailed","tablesSkipped","rowsMatched","rowsUpdated"]},"checkpoint":{"type":"object","nullable":true,"properties":{"lastTableId":{"type":"string","nullable":true}},"required":["lastTableId"]},"events":{"type":"array","items":{"type":"object","properties":{"time":{"type":"string"},"level":{"type":"string","enum":["info","warn","error"]},"message":{"type":"string"}},"required":["time","level","message"]}},"error":{"type":"string","nullable":true},"createdBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"startedTime":{"type":"string","nullable":true},"finishedTime":{"type":"string","nullable":true}},"required":["id","status","dryRun","scope","totals","checkpoint","events","error","createdBy","createdTime","startedTime","finishedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/system-field-backfill/jobs/%7BjobId%7D/resume \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/system-field-backfill/jobs/%7BjobId%7D/resume';\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/system-field-backfill/jobs/%7BjobId%7D/resume',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/system-field-backfill/jobs/%7BjobId%7D/resume\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/jwt-credentials/apps":{"get":{"description":"List every app with the signing-secret generation of its stored Teable access token and its AI-proxy JWT deploy freshness\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Apps holding long-lived JWT credentials","content":{"application/json":{"schema":{"type":"object","properties":{"apps":{"type":"array","items":{"type":"object","properties":{"appId":{"type":"string"},"appName":{"type":"string"},"baseId":{"type":"string"},"createdBy":{"type":"string"},"teableTokenSecret":{"type":"string","enum":["current","old","invalid"]},"hasAiAccess":{"type":"boolean"},"apiKeyExpiredTime":{"type":"string","nullable":true},"lastDeployedTime":{"type":"string","nullable":true},"lastDeployedVersion":{"type":"integer","nullable":true},"lastEnvRefreshedTime":{"type":"string","nullable":true},"envRefreshStatus":{"type":"string","nullable":true,"enum":["queued","retrying","running","failed"]},"envRefreshError":{"type":"string","nullable":true},"envRefreshStartedTime":{"type":"string","nullable":true},"envRefreshFailedTime":{"type":"string","nullable":true}},"required":["appId","appName","baseId","createdBy","teableTokenSecret","hasAiAccess","apiKeyExpiredTime","lastDeployedTime","lastDeployedVersion","lastEnvRefreshedTime","envRefreshStatus","envRefreshError","envRefreshStartedTime","envRefreshFailedTime"]}},"envRefreshQueue":{"type":"object","properties":{"pending":{"type":"integer"},"running":{"type":"integer"},"failed":{"type":"integer"}},"required":["pending","running","failed"]}},"required":["apps","envRefreshQueue"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/jwt-credentials/apps \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/jwt-credentials/apps';\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/jwt-credentials/apps',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/jwt-credentials/apps\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/jwt-credentials/apps/refresh-teable-tokens":{"post":{"description":"Re-mint the stored Teable access token of the given apps with the current JWT secret (non-destructive: the previous token keeps working until BACKEND_JWT_SECRET_OLD is removed; apps pick the new token up on their next deploy)\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"appIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":500}},"required":["appIds"]}}}},"responses":{"200":{"description":"Refresh result","content":{"application/json":{"schema":{"type":"object","properties":{"refreshed":{"type":"integer"}},"required":["refreshed"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/jwt-credentials/apps/refresh-teable-tokens \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"appIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/jwt-credentials/apps/refresh-teable-tokens';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"appIds\":[\"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/jwt-credentials/apps/refresh-teable-tokens',\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({appIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"appIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/jwt-credentials/apps/refresh-teable-tokens\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/jwt-credentials/apps/refresh-envs":{"post":{"description":"Queue a runtime-env refresh of the given apps: the current version is re-deployed with freshly built envs (stored Teable token + freshly signed AI-proxy JWT) without creating a new app version. Runs serially in the background.\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"appIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":50}},"required":["appIds"]}}}},"responses":{"200":{"description":"Queue result","content":{"application/json":{"schema":{"type":"object","properties":{"queued":{"type":"integer"}},"required":["queued"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/jwt-credentials/apps/refresh-envs \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"appIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/jwt-credentials/apps/refresh-envs';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"appIds\":[\"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/jwt-credentials/apps/refresh-envs',\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({appIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"appIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/jwt-credentials/apps/refresh-envs\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/announcement":{"post":{"description":"Publish an announcement\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"form":{"type":"string","enum":["banner","toast","modal","sidebar-card"]},"level":{"type":"string","enum":["info","warning","critical","success"]},"title":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"message":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"audience":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["all"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["space"]},"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100}},"required":["type","ids"]},{"type":"object","properties":{"type":{"type":"string","enum":["user"]},"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100}},"required":["type","ids"]}]},"options":{"type":"object","properties":{"action":{"type":"object","properties":{"label":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"url":{"type":"string","format":"uri"}},"required":["url"]}}},"startTime":{"type":"string","format":"date-time"},"endTime":{"type":"string","format":"date-time"}},"required":["form","level","title","message","audience","startTime","endTime"]}}}},"responses":{"201":{"description":"The published announcement","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"form":{"type":"string","enum":["banner","toast","modal","sidebar-card"]},"level":{"type":"string","enum":["info","warning","critical","success"]},"title":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"message":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"options":{"type":"object","nullable":true,"properties":{"action":{"type":"object","properties":{"label":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"url":{"type":"string","format":"uri"}},"required":["url"]}}},"startTime":{"type":"string"},"endTime":{"type":"string"},"audience":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["all"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["space"]},"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100}},"required":["type","ids"]},{"type":"object","properties":{"type":{"type":"string","enum":["user"]},"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100}},"required":["type","ids"]}]},"status":{"type":"string","enum":["scheduled","active","expired","withdrawn"]},"withdrawnTime":{"type":"string","nullable":true},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","avatar"]},"createdTime":{"type":"string"}},"required":["id","form","level","title","message","options","startTime","endTime","audience","status","withdrawnTime","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/announcement \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"form\":\"banner\",\"level\":\"info\",\"title\":{\"en\":\"string\",\"zh\":\"string\",\"it\":\"string\",\"fr\":\"string\",\"de\":\"string\",\"ja\":\"string\",\"ru\":\"string\",\"uk\":\"string\",\"tr\":\"string\",\"es\":\"string\",\"ar\":\"string\",\"he\":\"string\"},\"message\":{\"en\":\"string\",\"zh\":\"string\",\"it\":\"string\",\"fr\":\"string\",\"de\":\"string\",\"ja\":\"string\",\"ru\":\"string\",\"uk\":\"string\",\"tr\":\"string\",\"es\":\"string\",\"ar\":\"string\",\"he\":\"string\"},\"audience\":{\"type\":\"all\"},\"options\":{\"action\":{\"label\":{\"en\":\"string\",\"zh\":\"string\",\"it\":\"string\",\"fr\":\"string\",\"de\":\"string\",\"ja\":\"string\",\"ru\":\"string\",\"uk\":\"string\",\"tr\":\"string\",\"es\":\"string\",\"ar\":\"string\",\"he\":\"string\"},\"url\":\"http://example.com\"}},\"startTime\":\"2019-08-24T14:15:22Z\",\"endTime\":\"2019-08-24T14:15:22Z\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/announcement';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"form\":\"banner\",\"level\":\"info\",\"title\":{\"en\":\"string\",\"zh\":\"string\",\"it\":\"string\",\"fr\":\"string\",\"de\":\"string\",\"ja\":\"string\",\"ru\":\"string\",\"uk\":\"string\",\"tr\":\"string\",\"es\":\"string\",\"ar\":\"string\",\"he\":\"string\"},\"message\":{\"en\":\"string\",\"zh\":\"string\",\"it\":\"string\",\"fr\":\"string\",\"de\":\"string\",\"ja\":\"string\",\"ru\":\"string\",\"uk\":\"string\",\"tr\":\"string\",\"es\":\"string\",\"ar\":\"string\",\"he\":\"string\"},\"audience\":{\"type\":\"all\"},\"options\":{\"action\":{\"label\":{\"en\":\"string\",\"zh\":\"string\",\"it\":\"string\",\"fr\":\"string\",\"de\":\"string\",\"ja\":\"string\",\"ru\":\"string\",\"uk\":\"string\",\"tr\":\"string\",\"es\":\"string\",\"ar\":\"string\",\"he\":\"string\"},\"url\":\"http://example.com\"}},\"startTime\":\"2019-08-24T14:15:22Z\",\"endTime\":\"2019-08-24T14:15:22Z\"}'\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/announcement',\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 form: 'banner',\n level: 'info',\n title: {\n en: 'string',\n zh: 'string',\n it: 'string',\n fr: 'string',\n de: 'string',\n ja: 'string',\n ru: 'string',\n uk: 'string',\n tr: 'string',\n es: 'string',\n ar: 'string',\n he: 'string'\n },\n message: {\n en: 'string',\n zh: 'string',\n it: 'string',\n fr: 'string',\n de: 'string',\n ja: 'string',\n ru: 'string',\n uk: 'string',\n tr: 'string',\n es: 'string',\n ar: 'string',\n he: 'string'\n },\n audience: {type: 'all'},\n options: {\n action: {\n label: {\n en: 'string',\n zh: 'string',\n it: 'string',\n fr: 'string',\n de: 'string',\n ja: 'string',\n ru: 'string',\n uk: 'string',\n tr: 'string',\n es: 'string',\n ar: 'string',\n he: 'string'\n },\n url: 'http://example.com'\n }\n },\n startTime: '2019-08-24T14:15:22Z',\n endTime: '2019-08-24T14:15:22Z'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"form\\\":\\\"banner\\\",\\\"level\\\":\\\"info\\\",\\\"title\\\":{\\\"en\\\":\\\"string\\\",\\\"zh\\\":\\\"string\\\",\\\"it\\\":\\\"string\\\",\\\"fr\\\":\\\"string\\\",\\\"de\\\":\\\"string\\\",\\\"ja\\\":\\\"string\\\",\\\"ru\\\":\\\"string\\\",\\\"uk\\\":\\\"string\\\",\\\"tr\\\":\\\"string\\\",\\\"es\\\":\\\"string\\\",\\\"ar\\\":\\\"string\\\",\\\"he\\\":\\\"string\\\"},\\\"message\\\":{\\\"en\\\":\\\"string\\\",\\\"zh\\\":\\\"string\\\",\\\"it\\\":\\\"string\\\",\\\"fr\\\":\\\"string\\\",\\\"de\\\":\\\"string\\\",\\\"ja\\\":\\\"string\\\",\\\"ru\\\":\\\"string\\\",\\\"uk\\\":\\\"string\\\",\\\"tr\\\":\\\"string\\\",\\\"es\\\":\\\"string\\\",\\\"ar\\\":\\\"string\\\",\\\"he\\\":\\\"string\\\"},\\\"audience\\\":{\\\"type\\\":\\\"all\\\"},\\\"options\\\":{\\\"action\\\":{\\\"label\\\":{\\\"en\\\":\\\"string\\\",\\\"zh\\\":\\\"string\\\",\\\"it\\\":\\\"string\\\",\\\"fr\\\":\\\"string\\\",\\\"de\\\":\\\"string\\\",\\\"ja\\\":\\\"string\\\",\\\"ru\\\":\\\"string\\\",\\\"uk\\\":\\\"string\\\",\\\"tr\\\":\\\"string\\\",\\\"es\\\":\\\"string\\\",\\\"ar\\\":\\\"string\\\",\\\"he\\\":\\\"string\\\"},\\\"url\\\":\\\"http://example.com\\\"}},\\\"startTime\\\":\\\"2019-08-24T14:15:22Z\\\",\\\"endTime\\\":\\\"2019-08-24T14:15:22Z\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/announcement\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"List announcements, newest first\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Announcement list","content":{"application/json":{"schema":{"type":"object","properties":{"announcements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"form":{"type":"string","enum":["banner","toast","modal","sidebar-card"]},"level":{"type":"string","enum":["info","warning","critical","success"]},"title":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"message":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"options":{"type":"object","nullable":true,"properties":{"action":{"type":"object","properties":{"label":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"url":{"type":"string","format":"uri"}},"required":["url"]}}},"startTime":{"type":"string"},"endTime":{"type":"string"},"audience":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["all"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["space"]},"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100}},"required":["type","ids"]},{"type":"object","properties":{"type":{"type":"string","enum":["user"]},"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100}},"required":["type","ids"]}]},"status":{"type":"string","enum":["scheduled","active","expired","withdrawn"]},"withdrawnTime":{"type":"string","nullable":true},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","avatar"]},"createdTime":{"type":"string"}},"required":["id","form","level","title","message","options","startTime","endTime","audience","status","withdrawnTime","createdBy","createdTime"]}},"total":{"type":"number"}},"required":["announcements","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/announcement?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/announcement?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/announcement?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/announcement?skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/announcement/match-audience":{"post":{"description":"Resolve audience tokens to users or spaces by exact match\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["user","space"]},"tokens":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"minItems":1,"maxItems":100}},"required":["type","tokens"]}}}},"responses":{"201":{"description":"Resolved targets keyed by the token they matched","content":{"application/json":{"schema":{"type":"object","properties":{"matches":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["token","id","name","avatar"]}}},"required":["matches"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/announcement/match-audience \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"user\",\"tokens\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/announcement/match-audience';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"user\",\"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/admin/announcement/match-audience',\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: 'user', tokens: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"user\\\",\\\"tokens\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/announcement/match-audience\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/announcement/translate":{"post":{"description":"Translate announcement content into other supported languages\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sourceLanguage":{"type":"string","enum":["en","zh","it","fr","de","ja","ru","uk","tr","es","ar","he"]},"title":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":5000},"targets":{"type":"array","items":{"type":"string","enum":["en","zh","it","fr","de","ja","ru","uk","tr","es","ar","he"]},"minItems":1,"maxItems":12}},"required":["text","targets"]},"message":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":5000},"targets":{"type":"array","items":{"type":"string","enum":["en","zh","it","fr","de","ja","ru","uk","tr","es","ar","he"]},"minItems":1,"maxItems":12}},"required":["text","targets"]},"actionLabel":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":5000},"targets":{"type":"array","items":{"type":"string","enum":["en","zh","it","fr","de","ja","ru","uk","tr","es","ar","he"]},"minItems":1,"maxItems":12}},"required":["text","targets"]}},"required":["sourceLanguage"]}}}},"responses":{"201":{"description":"Translations keyed by target language","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"},"it":{"type":"string"},"fr":{"type":"string"},"de":{"type":"string"},"ja":{"type":"string"},"ru":{"type":"string"},"uk":{"type":"string"},"tr":{"type":"string"},"es":{"type":"string"},"ar":{"type":"string"},"he":{"type":"string"}}},"message":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"},"it":{"type":"string"},"fr":{"type":"string"},"de":{"type":"string"},"ja":{"type":"string"},"ru":{"type":"string"},"uk":{"type":"string"},"tr":{"type":"string"},"es":{"type":"string"},"ar":{"type":"string"},"he":{"type":"string"}}},"actionLabel":{"type":"object","properties":{"en":{"type":"string"},"zh":{"type":"string"},"it":{"type":"string"},"fr":{"type":"string"},"de":{"type":"string"},"ja":{"type":"string"},"ru":{"type":"string"},"uk":{"type":"string"},"tr":{"type":"string"},"es":{"type":"string"},"ar":{"type":"string"},"he":{"type":"string"}}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/announcement/translate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sourceLanguage\":\"en\",\"title\":{\"text\":\"string\",\"targets\":[\"en\"]},\"message\":{\"text\":\"string\",\"targets\":[\"en\"]},\"actionLabel\":{\"text\":\"string\",\"targets\":[\"en\"]}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/announcement/translate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sourceLanguage\":\"en\",\"title\":{\"text\":\"string\",\"targets\":[\"en\"]},\"message\":{\"text\":\"string\",\"targets\":[\"en\"]},\"actionLabel\":{\"text\":\"string\",\"targets\":[\"en\"]}}'\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/announcement/translate',\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 sourceLanguage: 'en',\n title: {text: 'string', targets: ['en']},\n message: {text: 'string', targets: ['en']},\n actionLabel: {text: 'string', targets: ['en']}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sourceLanguage\\\":\\\"en\\\",\\\"title\\\":{\\\"text\\\":\\\"string\\\",\\\"targets\\\":[\\\"en\\\"]},\\\"message\\\":{\\\"text\\\":\\\"string\\\",\\\"targets\\\":[\\\"en\\\"]},\\\"actionLabel\\\":{\\\"text\\\":\\\"string\\\",\\\"targets\\\":[\\\"en\\\"]}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/announcement/translate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/announcement/{announcementId}/withdraw":{"patch":{"description":"Withdraw an announcement. Idempotent: re-withdrawing returns the same result\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"announcementId","in":"path"}],"responses":{"200":{"description":"The withdrawn announcement","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"form":{"type":"string","enum":["banner","toast","modal","sidebar-card"]},"level":{"type":"string","enum":["info","warning","critical","success"]},"title":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"message":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"options":{"type":"object","nullable":true,"properties":{"action":{"type":"object","properties":{"label":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"url":{"type":"string","format":"uri"}},"required":["url"]}}},"startTime":{"type":"string"},"endTime":{"type":"string"},"audience":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["all"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["space"]},"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100}},"required":["type","ids"]},{"type":"object","properties":{"type":{"type":"string","enum":["user"]},"ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100}},"required":["type","ids"]}]},"status":{"type":"string","enum":["scheduled","active","expired","withdrawn"]},"withdrawnTime":{"type":"string","nullable":true},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","avatar"]},"createdTime":{"type":"string"}},"required":["id","form","level","title","message","options","startTime","endTime","audience","status","withdrawnTime","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/announcement/%7BannouncementId%7D/withdraw \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/announcement/%7BannouncementId%7D/withdraw';\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/announcement/%7BannouncementId%7D/withdraw',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/announcement/%7BannouncementId%7D/withdraw\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/integrity/bases":{"get":{"description":"Search bases for instance-admin schema integrity checks\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":50,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Matching bases","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"v2Enabled":{"type":"boolean"},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","nullable":true}},"required":["id","name","spaceId","spaceName","v2Enabled","dataDbMode","dataDbState"]}},"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/integrity/bases?search=SOME_STRING_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/integrity/bases?search=SOME_STRING_VALUE&page=SOME_NUMBER_VALUE&pageSize=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/integrity/bases?search=SOME_STRING_VALUE&page=SOME_NUMBER_VALUE&pageSize=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/integrity/bases?search=SOME_STRING_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/integrity/bases/{baseId}/check-stream":{"get":{"description":"Stream v2 schema integrity checks for a base as instance admin\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"required":false,"name":"statuses","in":"query"}],"responses":{"200":{"description":"SSE schema integrity check results"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/integrity/bases/%7BbaseId%7D/check-stream?statuses=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/integrity/bases/%7BbaseId%7D/check-stream?statuses=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/admin/integrity/bases/%7BbaseId%7D/check-stream?statuses=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/admin/integrity/bases/%7BbaseId%7D/check-stream?statuses=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/integrity/bases/{baseId}/repair-stream":{"post":{"description":"Stream v2 schema integrity repair for a base as instance admin\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean"},"statuses":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"targetStatuses":{"type":"array","items":{"type":"string","enum":["warn","error"]}}}}}}},"responses":{"200":{"description":"SSE schema integrity repair results"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/integrity/bases/%7BbaseId%7D/repair-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/integrity/bases/%7BbaseId%7D/repair-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"]}'\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/integrity/bases/%7BbaseId%7D/repair-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({dryRun: true, statuses: ['success'], targetStatuses: ['warn']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"dryRun\\\":true,\\\"statuses\\\":[\\\"success\\\"],\\\"targetStatuses\\\":[\\\"warn\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/integrity/bases/%7BbaseId%7D/repair-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/integrity/tables/{tableId}/check-stream":{"get":{"description":"Stream v2 schema integrity checks for a table as instance admin\n\nRequired token scopes: `instance|read`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"required":false,"name":"statuses","in":"query"}],"responses":{"200":{"description":"SSE schema integrity check results"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/integrity/tables/%7BtableId%7D/check-stream?statuses=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/integrity/tables/%7BtableId%7D/check-stream?statuses=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/admin/integrity/tables/%7BtableId%7D/check-stream?statuses=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/admin/integrity/tables/%7BtableId%7D/check-stream?statuses=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/integrity/tables/{tableId}/repair-stream":{"post":{"description":"Stream v2 schema integrity repair for a table as instance admin\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fieldId":{"type":"string"},"ruleId":{"type":"string"},"dryRun":{"type":"boolean"},"statuses":{"type":"array","items":{"type":"string","enum":["success","error","warn","skipped"]}},"targetStatuses":{"type":"array","items":{"type":"string","enum":["warn","error"]}},"manualRepairValues":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"boolean"}]}}}}}}},"responses":{"200":{"description":"SSE schema integrity repair results"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/integrity/tables/%7BtableId%7D/repair-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fieldId\":\"string\",\"ruleId\":\"string\",\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"],\"manualRepairValues\":{\"property1\":\"string\",\"property2\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/integrity/tables/%7BtableId%7D/repair-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fieldId\":\"string\",\"ruleId\":\"string\",\"dryRun\":true,\"statuses\":[\"success\"],\"targetStatuses\":[\"warn\"],\"manualRepairValues\":{\"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/admin/integrity/tables/%7BtableId%7D/repair-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 fieldId: 'string',\n ruleId: 'string',\n dryRun: true,\n statuses: ['success'],\n targetStatuses: ['warn'],\n manualRepairValues: {property1: 'string', property2: 'string'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fieldId\\\":\\\"string\\\",\\\"ruleId\\\":\\\"string\\\",\\\"dryRun\\\":true,\\\"statuses\\\":[\\\"success\\\"],\\\"targetStatuses\\\":[\\\"warn\\\"],\\\"manualRepairValues\\\":{\\\"property1\\\":\\\"string\\\",\\\"property2\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/integrity/tables/%7BtableId%7D/repair-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/cipher-reencrypt":{"post":{"description":"Converge stored ciphertexts (BYODB database URLs, app env variables, AI config secrets) onto the current primary cipher entry — for AI config this also encrypts legacy plaintext; dryRun=true only reports counts\n\nRequired token scopes: `instance|update`","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["true","false"]},"required":true,"name":"dryRun","in":"query"}],"responses":{"200":{"description":"Per-table convergence statistics","content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean"},"tables":{"type":"array","items":{"type":"object","properties":{"table":{"type":"string"},"total":{"type":"integer","minimum":0},"current":{"type":"integer","minimum":0},"reencrypted":{"type":"integer","minimum":0},"casConflict":{"type":"integer","minimum":0},"undecryptable":{"type":"integer","minimum":0},"undecryptableIds":{"type":"array","items":{"type":"string"}},"blockedPublicDefaultKey":{"type":"boolean"}},"required":["table","total","current","reencrypted","casConflict","undecryptable","undecryptableIds","blockedPublicDefaultKey"]}}},"required":["dryRun","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url 'https://app.teable.ai/api/admin/cipher-reencrypt?dryRun=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/cipher-reencrypt?dryRun=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/admin/cipher-reencrypt?dryRun=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/admin/cipher-reencrypt?dryRun=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\n\nRequired token scopes: `app|update`","tags":["app"],"x-mint":{"metadata":{"title":"Patch project app files","sidebarTitle":"Patch project app files","description":"Update app files"}},"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\"))"}]},"get":{"description":"Get app source files (loaded lazily by the editor, not by the preview path)\n\nRequired token scopes: `app|update`","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 source files","content":{"application/json":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"content":{"type":"string"},"encoding":{"type":"string","enum":["base64"]}},"required":["path","content"]}},"version":{"type":"number"}},"required":["files","version"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\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: '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/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(\"GET\", \"/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\n\nRequired token scopes: `app|update`","tags":["app"],"x-mint":{"metadata":{"title":"Patch project app props","sidebarTitle":"Patch project app props","description":"Update app props"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","nullable":true}}}}}},"responses":{"200":{"description":"App props updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true}},"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' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/props';\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\"}'\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/app/%7BappId%7D/props',\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'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/props\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/login-config":{"patch":{"description":"Update app login config. Backend decides whether the sandbox dev server needs a restart based on the diff.\n\nRequired token scopes: `app|update`","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":{"application/json":{"schema":{"type":"object","properties":{"loginConfig":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"userTableId":{"type":"string"},"emailFieldId":{"type":"string"},"providers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["email-otp"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["google"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["teable"]}},"required":["type"]}]},"default":[]},"access":{"type":"object","properties":{"mode":{"type":"string","enum":["open","domain","existing-only"],"default":"open"},"domains":{"type":"array","items":{"type":"string"}}}}},"required":["enabled","userTableId","emailFieldId"]}},"required":["loginConfig"]}}}},"responses":{"200":{"description":"App login config updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"loginConfig":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"userTableId":{"type":"string"},"emailFieldId":{"type":"string"},"providers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["email-otp"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["google"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["teable"]}},"required":["type"]}]},"default":[]},"access":{"type":"object","properties":{"mode":{"type":"string","enum":["open","domain","existing-only"],"default":"open"},"domains":{"type":"array","items":{"type":"string"}}}}},"required":["enabled","userTableId","emailFieldId"]},"previewReloaded":{"type":"boolean"},"previewUrl":{"type":"string"}},"required":["id","previewReloaded"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/login-config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"loginConfig\":{\"enabled\":true,\"userTableId\":\"string\",\"emailFieldId\":\"string\",\"providers\":[],\"access\":{\"mode\":\"open\",\"domains\":[\"string\"]}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/login-config';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"loginConfig\":{\"enabled\":true,\"userTableId\":\"string\",\"emailFieldId\":\"string\",\"providers\":[],\"access\":{\"mode\":\"open\",\"domains\":[\"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/app/%7BappId%7D/login-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 loginConfig: {\n enabled: true,\n userTableId: 'string',\n emailFieldId: 'string',\n providers: [],\n access: {mode: 'open', domains: ['string']}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"loginConfig\\\":{\\\"enabled\\\":true,\\\"userTableId\\\":\\\"string\\\",\\\"emailFieldId\\\":\\\"string\\\",\\\"providers\\\":[],\\\"access\\\":{\\\"mode\\\":\\\"open\\\",\\\"domains\\\":[\\\"string\\\"]}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/login-config\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/site-info":{"get":{"description":"Get the published-site metadata (title/description/favicon) of an app\n\nRequired token scopes: `app|read`","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 site info","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"iconUrl":{"type":"string"},"iconPath":{"type":"string"},"isDefaultIcon":{"type":"boolean"}},"required":["isDefaultIcon"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/site-info \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/site-info';\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/site-info',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/site-info\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update the published-site metadata (title/description/favicon) of an app\n\nRequired token scopes: `app|update`","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":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","maxLength":120},"description":{"type":"string","maxLength":500},"icon":{"type":"object","nullable":true,"properties":{"content":{"type":"string","maxLength":6990508},"mimeType":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/svg+xml","image/x-icon","image/vnd.microsoft.icon"]}},"required":["content","mimeType"]}}}}}},"responses":{"200":{"description":"App site info updated","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"number"}},"required":["version"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/site-info \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"title\":\"string\",\"description\":\"string\",\"icon\":{\"content\":\"string\",\"mimeType\":\"image/png\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/site-info';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"title\":\"string\",\"description\":\"string\",\"icon\":{\"content\":\"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: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/site-info',\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 icon: {content: 'string', mimeType: 'image/png'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"title\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"icon\\\":{\\\"content\\\":\\\"string\\\",\\\"mimeType\\\":\\\"image/png\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/site-info\", payload, 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\n\nRequired token scopes: `app|update`","tags":["app"],"x-mint":{"metadata":{"title":"Post project app run","sidebarTitle":"Post project app run","description":"Run the app code"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project ID","name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","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\n\nRequired token scopes: `app|update`","tags":["app"],"x-mint":{"metadata":{"title":"Get project app export code","sidebarTitle":"Get project app export code","description":"Export app source code as a ZIP file"}},"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}/code":{"get":{"description":"Download the app source code of the current version as a ZIP file (env files excluded)\n\nRequired token scopes: `app|update`","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 downloaded 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/code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/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/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/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\n\nRequired token scopes: `app|update`","tags":["app"],"x-mint":{"metadata":{"title":"Post project app import code","sidebarTitle":"Post project app import code","description":"Import app source code from a ZIP file"}},"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"},"previewUrl":{"type":"string"}},"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\n\nRequired token scopes: `app|update`","tags":["app"],"x-mint":{"metadata":{"title":"Post project app deploy","sidebarTitle":"Post project app deploy","description":"Deploy app"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"showBadge":{"type":"boolean"}}}}}},"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"},"deploymentId":{"type":"string","description":"Deployment id"},"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' \\\n --header 'content-type: application/json' \\\n --data '{\"showBadge\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"showBadge\":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/app/%7BappId%7D/deploy',\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({showBadge: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"showBadge\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/deploy/stream":{"post":{"description":"Deploy app and stream progress events\n\nRequired token scopes: `app|update`","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"showBadge":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Server-sent app deployment progress events","content":{"text/event-stream":{"schema":{"type":"object","properties":{"id":{"type":"string"},"step":{"type":"string","enum":["prepare","version-save","env","provider","artifact-build","artifact-upload","runtime-create","runtime-activate","project-setup","env-setup","domain-setup","files-prepare","deployment-create","status-check","finalize"]},"status":{"type":"string","enum":["pending","running","success","failed"]},"message":{"type":"string"},"timestamp":{"type":"number"},"provider":{"type":"string"},"version":{"type":"number"},"deploymentId":{"type":"string"},"publicUrl":{"type":"string"},"error":{"type":"string"}},"required":["id","step","status","message","timestamp"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"showBadge\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"showBadge\":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/app/%7BappId%7D/deploy/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({showBadge: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"showBadge\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/stream\", payload, 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\n\nRequired token scopes: `app|read`","tags":["app"],"x-mint":{"metadata":{"title":"Get project app deploystatus","sidebarTitle":"Get project app deploystatus","description":"Get app deployment status"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project 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"},"deploymentId":{"type":"string","description":"Deployment id"},"publicUrl":{"type":"string","description":"Public URL"},"error":{"type":"string","description":"Error message if failed"},"customDomainEnabled":{"type":"boolean","description":"Whether app custom domains can be bound"},"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}/unpublish":{"post":{"description":"Unpublish an app by deleting all Vercel deployments. The Vercel project, env vars, and custom domain configuration are preserved so the app can be republished later.\n\nRequired token scopes: `app|update`","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Project ID"},"required":true,"description":"Project ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"responses":{"201":{"description":"Unpublish result","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success","failed"],"description":"Unpublish result status"},"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/unpublish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/unpublish';\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/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(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/unpublish\", 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.\n\nRequired token scopes: `app|delete`","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}/chat/generation/status":{"get":{"description":"Get durable App Builder generation status\n\nRequired token scopes: `app|update`","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"streamInstanceId","in":"query"}],"responses":{"200":{"description":"Durable App Builder generation status"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/chat/generation/status?streamInstanceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/chat/generation/status?streamInstanceId=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/app/%7BappId%7D/chat/generation/status?streamInstanceId=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/app/%7BappId%7D/chat/generation/status?streamInstanceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/chat/sandbox/files/grant":{"get":{"description":"Issue a scoped grant (base URL + token) for direct access to the app sandbox files\n\nRequired token scopes: `app|update`","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":"Sandbox file access grant"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/chat/sandbox/files/grant \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/chat/sandbox/files/grant';\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/chat/sandbox/files/grant',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/chat/sandbox/files/grant\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/chat/sandbox/files/storage-usage":{"get":{"description":"Get whole-sandbox storage usage (uploads + outputs) for the app sandbox meter\n\nRequired token scopes: `app|update`","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":"Sandbox storage usage"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/chat/sandbox/files/storage-usage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/chat/sandbox/files/storage-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/app/%7BappId%7D/chat/sandbox/files/storage-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/app/%7BappId%7D/chat/sandbox/files/storage-usage\", 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.\n\nRequired token scopes: `app|delete`","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\"))"}]}},"/base/{baseId}/app/{appId}/system-domain-prefix":{"patch":{"description":"Update app system domain prefix\n\nRequired token scopes: `app|update`","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":{"application/json":{"schema":{"type":"object","properties":{"prefix":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$"}},"required":["prefix"]}}}},"responses":{"200":{"description":"App system domain prefix updated","content":{"application/json":{"schema":{"type":"object","properties":{"systemDomainPrefix":{"type":"string"},"systemDomain":{"type":"string"},"systemDomainUrl":{"type":"string"},"accessUrl":{"type":"string","nullable":true},"accessUrlType":{"type":"string","nullable":true,"enum":["custom","system","provider"]},"accessUrlNeedsRefresh":{"type":"boolean"}},"required":["systemDomainPrefix","systemDomain","systemDomainUrl","accessUrl","accessUrlType"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/system-domain-prefix \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"prefix\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/system-domain-prefix';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"prefix\":\"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/app/%7BappId%7D/system-domain-prefix',\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({prefix: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"prefix\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/system-domain-prefix\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/access-link/refresh":{"post":{"description":"Refresh app access link\n\nRequired token scopes: `app|update`","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 access link refreshed","content":{"application/json":{"schema":{"type":"object","properties":{"systemDomainPrefix":{"type":"string"},"systemDomain":{"type":"string"},"systemDomainUrl":{"type":"string"},"accessUrl":{"type":"string","nullable":true},"accessUrlType":{"type":"string","nullable":true,"enum":["custom","system","provider"]},"accessUrlNeedsRefresh":{"type":"boolean"}},"required":["systemDomainPrefix","systemDomain","systemDomainUrl","accessUrl","accessUrlType"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/access-link/refresh \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/access-link/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/app/%7BappId%7D/access-link/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/app/%7BappId%7D/access-link/refresh\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/restart-preview":{"post":{"description":"Restart the app preview\n\nRequired token scopes: `app|update`","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":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"previewUrl":{"type":"string"}},"required":["ok"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/restart-preview \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/restart-preview';\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/restart-preview',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/restart-preview\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/integrations/ai-key":{"get":{"summary":"Get an app's AI proxy access key state","description":"Returns the instance-level injection switch plus the AI proxy api_key metadata for the app (null metadata when AI access is disabled).\n\nRequired token scopes: `app|update`","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":"AI access state: injection switch and metadata (null when disabled)","content":{"application/json":{"schema":{"type":"object","properties":{"injectionEnabled":{"type":"boolean"},"metadata":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"baseId":{"type":"string"},"userId":{"type":"string"},"expiredTime":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string","nullable":true},"apiBaseUrl":{"type":"string"}},"required":["id","baseId","userId","expiredTime","createdTime","lastUsedTime","apiBaseUrl"]}},"required":["injectionEnabled","metadata"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/integrations/ai-key \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/integrations/ai-key';\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/integrations/ai-key',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/integrations/ai-key\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"summary":"Enable AI proxy access for an app","description":"Provisions a long-lived AI proxy api_key for the app and returns its JWT exactly once.\n\nRequired token scopes: `app|update`","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"201":{"description":"AI access enabled; one-time token returned","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"token":{"type":"string"},"expiredTime":{"type":"string"}},"required":["id","token","expiredTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/integrations/ai-key \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/integrations/ai-key';\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/integrations/ai-key',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/integrations/ai-key\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Disable AI proxy access for an app","description":"Revokes the app AI proxy api_key and clears the pointer on the app row.\n\nRequired token scopes: `app|update`","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":"AI access disabled","content":{"application/json":{"schema":{"type":"object","properties":{"appId":{"type":"string"}},"required":["appId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/integrations/ai-key \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/integrations/ai-key';\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/integrations/ai-key',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/integrations/ai-key\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/integrations/ai-key/rotate":{"post":{"summary":"Rotate an app's AI proxy access key","description":"Keeps the api_key row id but replaces its sign and returns a fresh one-time JWT; the previous JWT stops validating.\n\nRequired token scopes: `app|update`","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"201":{"description":"AI access key rotated; new one-time token returned","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"token":{"type":"string"},"expiredTime":{"type":"string"}},"required":["id","token","expiredTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/integrations/ai-key/rotate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/integrations/ai-key/rotate';\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/integrations/ai-key/rotate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/integrations/ai-key/rotate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication/{id}":{"get":{"description":"Get a authentication\n\nRequired token scopes: `enterprise|read`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|read`","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\n\nRequired token scopes: `enterprise|update`","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","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":[],"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/providers';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication/providers\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/domain-verification":{"delete":{"description":"Delete a domain verification\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|read`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|read`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|read`","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"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\n\nRequired token scopes: `enterprise|read`","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"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\n\nRequired token scopes: `enterprise|read`","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"]}}}}}},"description":"Required token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|update`","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\n\nRequired token scopes: `enterprise|update`","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"]}}}}},"description":"Required token scopes: `enterprise|read`","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"}}}}}},"description":"Required token scopes: `enterprise|read`","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\n\nRequired token scopes: `enterprise|update`","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","relatedSearchAll"]}},"required":["departmentScope"]}}}},"responses":{"200":{"description":"Update department scope","content":{"application/json":{"schema":{"type":"object","properties":{"departmentScope":{"type":"string","enum":["all","related","relatedSearchAll"]}},"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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["space-manage","enterprise"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/count"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/count';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage/count\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage":{"get":{"description":"Get space manage list\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["space-manage","enterprise"],"security":[{"cookieAuth":[]}],"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"},"dataDb":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}},"required":["id","name","baseCount","collaboratorCount"]}}}}}},"x-excluded":true,"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'"},{"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'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE\")\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["space-manage","enterprise"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Space removed from organization successfully"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization\")\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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["space-manage","enterprise"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}":{"get":{"description":"Get space manage detail\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["space-manage","enterprise"],"security":[{"cookieAuth":[]}],"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"},"dataDb":{"type":"object","properties":{"mode":{"type":"string","enum":["default","byodb"]},"state":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"provider":{"type":"string","enum":["postgres"]},"displayHost":{"type":"string"},"displayDatabase":{"type":"string"},"internalSchema":{"type":"string"},"schemaVersion":{"type":"string","nullable":true},"lastValidatedAt":{"type":"string"},"lastError":{"type":"string"},"capabilities":{"type":"object","properties":{"createSchema":{"type":"boolean"},"createTable":{"type":"boolean"},"createFunction":{"type":"boolean"},"createTrigger":{"type":"boolean"},"createRole":{"type":"boolean"},"grantPrivileges":{"type":"boolean"},"inspectActivity":{"type":"boolean"}},"required":["createSchema","createTable","createFunction","createTrigger","createRole","grantPrivileges","inspectActivity"]},"health":{"type":"object","properties":{"state":{"type":"string","enum":["healthy","read_only","unreachable","degraded"]},"reason":{"type":"string","nullable":true},"changedAt":{"type":"string"},"lastCheckAt":{"type":"string"}},"required":["state"]},"migration":{"type":"object","properties":{"jobId":{"type":"string"},"state":{"type":"string","enum":["pending","waiting_worker","preflight","freezing_writes","copying","validating","switching","succeeded","failed","canceled","rolled_back"]},"targetInternalSchema":{"type":"string"},"switchOnCompletion":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["jobId","state","targetInternalSchema"]},"relatedSpaces":{"type":"object","properties":{"primarySpaceId":{"type":"string"},"hasCrossSpaceLinks":{"type":"boolean"},"spaces":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"isPrimary":{"type":"boolean"},"baseIds":{"type":"array","items":{"type":"string"}},"tableIds":{"type":"array","items":{"type":"string"}},"dataDbMode":{"type":"string","enum":["default","byodb"]},"dataDbState":{"type":"string","enum":["ready","validating","initializing","migrating","error","disabled"]},"dataDbConnectionId":{"type":"string","nullable":true},"dataDbUrlFingerprint":{"type":"string","nullable":true},"dataDbDatabaseFingerprint":{"type":"string","nullable":true},"dataDbDisplayHost":{"type":"string","nullable":true},"dataDbDisplayDatabase":{"type":"string","nullable":true},"dataDbInternalSchema":{"type":"string","nullable":true}},"required":["spaceId","name","isPrimary","baseIds","tableIds","dataDbMode"]}},"links":{"type":"array","items":{"type":"object","properties":{"fromSpaceId":{"type":"string"},"fromTableId":{"type":"string"},"fromFieldId":{"type":"string"},"toSpaceId":{"type":"string"},"toTableId":{"type":"string"}},"required":["fromSpaceId","fromTableId","fromFieldId","toSpaceId","toTableId"]}}},"required":["primarySpaceId","hasCrossSpaceLinks","spaces","links"]}},"required":["mode","state"]}},"required":["id","name","isOrganization","base","collaboratorCount","externalUserCount"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D\")\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"]}}}}},"description":"Required token scopes: `enterprise|read`","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"}},"description":"Required token scopes: `enterprise|update`","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"}},"description":"Required token scopes: `enterprise|update`","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"}},"description":"Required token scopes: `enterprise|update`","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"]}}}}},"description":"Required token scopes: `enterprise|update`","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"]}}}}}},"description":"Required token scopes: `enterprise|read`","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"}},"description":"Required token scopes: `enterprise|update`","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"}},"description":"Required token scopes: `enterprise|update`","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"]}}}}},"description":"Required token scopes: `enterprise|read`","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"}},"description":"Required token scopes: `enterprise|update`","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"}},"description":"Required token scopes: `enterprise|update`","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\"))"}]}},"/experiment/onboarding-variant":{"get":{"description":"Get the effective onboarding-experiment variant for the current user\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["experiment"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"The variant to render","content":{"application/json":{"schema":{"type":"object","properties":{"variant":{"type":"string","enum":["control","treatment"]}},"required":["variant"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/experiment/onboarding-variant"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/experiment/onboarding-variant';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/experiment/onboarding-variant',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/experiment/onboarding-variant\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/me":{"get":{"description":"Get organization me\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["organization"],"security":[{"cookieAuth":[]}],"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/me"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/me';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/me\")\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":[],"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/instance/organization';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/instance/organization\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine":{"post":{"summary":"Create routine","description":"Create a routine in draft status. Provisions a dedicated bot user (system user, base collaborator) and, when a config is supplied, the first immutable config snapshot.\n\nRequired token scopes: `routine|create`","tags":["routine"],"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},"config":{"type":"object","properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]}},"required":["name"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","active","inactive"]},"currentSnapshotId":{"type":"string","nullable":true},"config":{"type":"object","nullable":true,"properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]},"hasDraft":{"type":"boolean"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"lastModifiedTime":{"type":"string","nullable":true},"nextRunAt":{"type":"string","nullable":true},"alertContact":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","nullable":true},"avatar":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","baseId","name","status","currentSnapshotId","config","hasDraft","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"config\":{\"prompt\":\"string\",\"model\":\"string\",\"effort\":\"low\",\"trigger\":{\"type\":\"schedule\",\"rrule\":\"string\",\"timezone\":\"string\",\"starting\":\"2019-08-24T14:15:22Z\",\"ending\":\"2019-08-24T14:15:22Z\"},\"maxRunMinutes\":5,\"chatMode\":\"new\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"config\":{\"prompt\":\"string\",\"model\":\"string\",\"effort\":\"low\",\"trigger\":{\"type\":\"schedule\",\"rrule\":\"string\",\"timezone\":\"string\",\"starting\":\"2019-08-24T14:15:22Z\",\"ending\":\"2019-08-24T14:15:22Z\"},\"maxRunMinutes\":5,\"chatMode\":\"new\"}}'\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/routine',\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 config: {\n prompt: 'string',\n model: 'string',\n effort: 'low',\n trigger: {\n type: 'schedule',\n rrule: 'string',\n timezone: 'string',\n starting: '2019-08-24T14:15:22Z',\n ending: '2019-08-24T14:15:22Z'\n },\n maxRunMinutes: 5,\n chatMode: 'new'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"config\\\":{\\\"prompt\\\":\\\"string\\\",\\\"model\\\":\\\"string\\\",\\\"effort\\\":\\\"low\\\",\\\"trigger\\\":{\\\"type\\\":\\\"schedule\\\",\\\"rrule\\\":\\\"string\\\",\\\"timezone\\\":\\\"string\\\",\\\"starting\\\":\\\"2019-08-24T14:15:22Z\\\",\\\"ending\\\":\\\"2019-08-24T14:15:22Z\\\"},\\\"maxRunMinutes\\\":5,\\\"chatMode\\\":\\\"new\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/routine\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"List routines of a base","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"All non-deleted routines of the base","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","active","inactive"]},"currentSnapshotId":{"type":"string","nullable":true},"config":{"type":"object","nullable":true,"properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]},"hasDraft":{"type":"boolean"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"lastModifiedTime":{"type":"string","nullable":true},"nextRunAt":{"type":"string","nullable":true},"alertContact":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","nullable":true},"avatar":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","baseId","name","status","currentSnapshotId","config","hasDraft","createdBy","createdTime"]}}}}}},"description":"Required token scopes: `routine|read`","x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine';\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/routine',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/routine\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}":{"get":{"summary":"Get routine","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"responses":{"200":{"description":"The routine with its current config","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","active","inactive"]},"currentSnapshotId":{"type":"string","nullable":true},"config":{"type":"object","nullable":true,"properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]},"hasDraft":{"type":"boolean"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"lastModifiedTime":{"type":"string","nullable":true},"nextRunAt":{"type":"string","nullable":true},"alertContact":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","nullable":true},"avatar":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","baseId","name","status","currentSnapshotId","config","hasDraft","createdBy","createdTime"]}}}}},"description":"Required token scopes: `routine|read`","x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%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/routine/%7BroutineId%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/routine/%7BroutineId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"summary":"Update routine","description":"Renaming only touches the routine row (and the bot user name). A changed config inserts a new immutable snapshot and swaps the current pointer; saving an identical config inserts nothing.\n\nRequired token scopes: `routine|update`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"config":{"type":"object","properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]}}}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","active","inactive"]},"currentSnapshotId":{"type":"string","nullable":true},"config":{"type":"object","nullable":true,"properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]},"hasDraft":{"type":"boolean"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"lastModifiedTime":{"type":"string","nullable":true},"nextRunAt":{"type":"string","nullable":true},"alertContact":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","nullable":true},"avatar":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","baseId","name","status","currentSnapshotId","config","hasDraft","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"config\":{\"prompt\":\"string\",\"model\":\"string\",\"effort\":\"low\",\"trigger\":{\"type\":\"schedule\",\"rrule\":\"string\",\"timezone\":\"string\",\"starting\":\"2019-08-24T14:15:22Z\",\"ending\":\"2019-08-24T14:15:22Z\"},\"maxRunMinutes\":5,\"chatMode\":\"new\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"config\":{\"prompt\":\"string\",\"model\":\"string\",\"effort\":\"low\",\"trigger\":{\"type\":\"schedule\",\"rrule\":\"string\",\"timezone\":\"string\",\"starting\":\"2019-08-24T14:15:22Z\",\"ending\":\"2019-08-24T14:15:22Z\"},\"maxRunMinutes\":5,\"chatMode\":\"new\"}}'\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/routine/%7BroutineId%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 config: {\n prompt: 'string',\n model: 'string',\n effort: 'low',\n trigger: {\n type: 'schedule',\n rrule: 'string',\n timezone: 'string',\n starting: '2019-08-24T14:15:22Z',\n ending: '2019-08-24T14:15:22Z'\n },\n maxRunMinutes: 5,\n chatMode: 'new'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"config\\\":{\\\"prompt\\\":\\\"string\\\",\\\"model\\\":\\\"string\\\",\\\"effort\\\":\\\"low\\\",\\\"trigger\\\":{\\\"type\\\":\\\"schedule\\\",\\\"rrule\\\":\\\"string\\\",\\\"timezone\\\":\\\"string\\\",\\\"starting\\\":\\\"2019-08-24T14:15:22Z\\\",\\\"ending\\\":\\\"2019-08-24T14:15:22Z\\\"},\\\"maxRunMinutes\\\":5,\\\"chatMode\\\":\\\"new\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/routine/%7BroutineId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Soft-delete routine","description":"Soft delete: run history and chats stay readable, the bot user is deactivated and removed from the base collaborators.\n\nRequired token scopes: `routine|delete`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"responses":{"200":{"description":"Deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%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/routine/%7BroutineId%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/routine/%7BroutineId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}/run":{"get":{"summary":"List runs of a routine","description":"Run history, newest first.\n\nRequired token scopes: `routine|update`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"},{"schema":{"type":"string","format":"date-time","description":"Inclusive lower bound on createdTime"},"required":false,"description":"Inclusive lower bound on createdTime","name":"createdTimeStart","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Inclusive upper bound on createdTime"},"required":false,"description":"Inclusive upper bound on createdTime","name":"createdTimeEnd","in":"query"},{"schema":{"type":"string","enum":["pending","running","success","failed","canceled"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"take","in":"query"},{"schema":{"type":"string","description":"Keyset cursor from the previous page; omit for the first page"},"required":false,"description":"Keyset cursor from the previous page; omit for the first page","name":"cursor","in":"query"}],"responses":{"200":{"description":"One page of the run history plus the total row count","content":{"application/json":{"schema":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"routineId":{"type":"string"},"snapshotId":{"type":"string"},"chatId":{"type":"string","nullable":true},"status":{"type":"string","enum":["pending","running","success","failed","canceled"]},"errorMsg":{"type":"object","nullable":true,"properties":{"reason":{"type":"string","enum":["runFail","timeout","creditExceed","overlap","queueTimeout"]},"message":{"type":"string"}},"required":["reason"],"additionalProperties":{"nullable":true}},"plannedAt":{"type":"string","nullable":true,"description":"The scheduled occurrence this run served; null for a manual run"},"startedAt":{"type":"string","nullable":true},"finishedAt":{"type":"string","nullable":true},"spent":{"type":"number","nullable":true,"description":"Execution wall-clock time in ms"},"createdTime":{"type":"string"}},"required":["id","routineId","snapshotId","chatId","status","errorMsg","plannedAt","startedAt","finishedAt","spent","createdTime"]}},"nextCursor":{"type":"string","nullable":true,"description":"Pass back as `cursor` for the next page; null when exhausted"}},"required":["runs","nextCursor"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/run?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&status=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/run?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&status=SOME_STRING_VALUE&take=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/base/%7BbaseId%7D/routine/%7BroutineId%7D/run?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&status=SOME_STRING_VALUE&take=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/base/%7BbaseId%7D/routine/%7BroutineId%7D/run?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE&status=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}/run/summary":{"get":{"description":"Run counts per status and the mean execution time, under the same filters as the run list\n\nRequired token scopes: `routine|update`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"},{"schema":{"type":"string","format":"date-time","description":"Inclusive lower bound on createdTime"},"required":false,"description":"Inclusive lower bound on createdTime","name":"createdTimeStart","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Inclusive upper bound on createdTime"},"required":false,"description":"Inclusive upper bound on createdTime","name":"createdTimeEnd","in":"query"}],"responses":{"200":{"description":"Run summary","content":{"application/json":{"schema":{"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"}}},"avgSpent":{"type":"number","description":"Mean execution time in ms over runs that executed"}},"required":["totalCount","statusStats","avgSpent"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/run/summary?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/run/summary?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=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/routine/%7BroutineId%7D/run/summary?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=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/routine/%7BroutineId%7D/run/summary?createdTimeStart=SOME_STRING_VALUE&createdTimeEnd=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}/run/{runId}":{"get":{"summary":"Get a single run of a routine","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"runId","in":"path"}],"responses":{"200":{"description":"The run","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"routineId":{"type":"string"},"snapshotId":{"type":"string"},"chatId":{"type":"string","nullable":true},"status":{"type":"string","enum":["pending","running","success","failed","canceled"]},"errorMsg":{"type":"object","nullable":true,"properties":{"reason":{"type":"string","enum":["runFail","timeout","creditExceed","overlap","queueTimeout"]},"message":{"type":"string"}},"required":["reason"],"additionalProperties":{"nullable":true}},"plannedAt":{"type":"string","nullable":true,"description":"The scheduled occurrence this run served; null for a manual run"},"startedAt":{"type":"string","nullable":true},"finishedAt":{"type":"string","nullable":true},"spent":{"type":"number","nullable":true,"description":"Execution wall-clock time in ms"},"createdTime":{"type":"string"},"lastAssistantText":{"type":"string","nullable":true,"description":"The last text part of this run's assistant reply; null while the run is in flight or when it produced no text"}},"required":["id","routineId","snapshotId","chatId","status","errorMsg","plannedAt","startedAt","finishedAt","spent","createdTime","lastAssistantText"]}}}}},"description":"Required token scopes: `routine|update`","x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/run/%7BrunId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%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/routine/%7BroutineId%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/routine/%7BroutineId%7D/run/%7BrunId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}/draft":{"put":{"summary":"Save routine draft","description":"Stores edits without changing what runs. Scheduled runs keep using the published snapshot until the draft is published. A draft matching the published config is cleared instead of stored.\n\nRequired token scopes: `routine|update`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"config":{"type":"object","properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]}},"required":["config"]}}}},"responses":{"200":{"description":"Draft saved","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","active","inactive"]},"currentSnapshotId":{"type":"string","nullable":true},"config":{"type":"object","nullable":true,"properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]},"hasDraft":{"type":"boolean"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"lastModifiedTime":{"type":"string","nullable":true},"nextRunAt":{"type":"string","nullable":true},"alertContact":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","nullable":true},"avatar":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","baseId","name","status","currentSnapshotId","config","hasDraft","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/draft \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"config\":{\"prompt\":\"string\",\"model\":\"string\",\"effort\":\"low\",\"trigger\":{\"type\":\"schedule\",\"rrule\":\"string\",\"timezone\":\"string\",\"starting\":\"2019-08-24T14:15:22Z\",\"ending\":\"2019-08-24T14:15:22Z\"},\"maxRunMinutes\":5,\"chatMode\":\"new\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/draft';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"config\":{\"prompt\":\"string\",\"model\":\"string\",\"effort\":\"low\",\"trigger\":{\"type\":\"schedule\",\"rrule\":\"string\",\"timezone\":\"string\",\"starting\":\"2019-08-24T14:15:22Z\",\"ending\":\"2019-08-24T14:15:22Z\"},\"maxRunMinutes\":5,\"chatMode\":\"new\"}}'\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/routine/%7BroutineId%7D/draft',\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 config: {\n prompt: 'string',\n model: 'string',\n effort: 'low',\n trigger: {\n type: 'schedule',\n rrule: 'string',\n timezone: 'string',\n starting: '2019-08-24T14:15:22Z',\n ending: '2019-08-24T14:15:22Z'\n },\n maxRunMinutes: 5,\n chatMode: 'new'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"config\\\":{\\\"prompt\\\":\\\"string\\\",\\\"model\\\":\\\"string\\\",\\\"effort\\\":\\\"low\\\",\\\"trigger\\\":{\\\"type\\\":\\\"schedule\\\",\\\"rrule\\\":\\\"string\\\",\\\"timezone\\\":\\\"string\\\",\\\"starting\\\":\\\"2019-08-24T14:15:22Z\\\",\\\"ending\\\":\\\"2019-08-24T14:15:22Z\\\"},\\\"maxRunMinutes\\\":5,\\\"chatMode\\\":\\\"new\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/draft\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Discard routine draft","description":"Throws the unpublished edits away; the published snapshot is untouched.\n\nRequired token scopes: `routine|update`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"responses":{"200":{"description":"Discarded","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","active","inactive"]},"currentSnapshotId":{"type":"string","nullable":true},"config":{"type":"object","nullable":true,"properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]},"hasDraft":{"type":"boolean"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"lastModifiedTime":{"type":"string","nullable":true},"nextRunAt":{"type":"string","nullable":true},"alertContact":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","nullable":true},"avatar":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","baseId","name","status","currentSnapshotId","config","hasDraft","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/draft \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/draft';\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/routine/%7BroutineId%7D/draft',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/routine/%7BroutineId%7D/draft\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}/draft/publish":{"post":{"summary":"Publish routine draft","description":"Promotes the draft to a new snapshot, so later runs use it, and re-registers the schedule. A no-op when there is no draft.\n\nRequired token scopes: `routine|update`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"responses":{"200":{"description":"Published","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","active","inactive"]},"currentSnapshotId":{"type":"string","nullable":true},"config":{"type":"object","nullable":true,"properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]},"hasDraft":{"type":"boolean"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"lastModifiedTime":{"type":"string","nullable":true},"nextRunAt":{"type":"string","nullable":true},"alertContact":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","nullable":true},"avatar":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","baseId","name","status","currentSnapshotId","config","hasDraft","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/draft/publish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/draft/publish';\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/routine/%7BroutineId%7D/draft/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(\"POST\", \"/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/draft/publish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}/permanent":{"delete":{"summary":"Permanently delete routine","description":"Hard delete: the routine, its config snapshots, run history, chats and bot user are removed together with any trash entry. This action cannot be undone.\n\nRequired token scopes: `routine|delete`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"responses":{"200":{"description":"Permanently deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%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/routine/%7BroutineId%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/routine/%7BroutineId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}/activate":{"post":{"summary":"Activate routine","description":"Moves a draft/paused/ended routine to active. Requires a saved config snapshot.\n\nRequired token scopes: `routine|update`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"responses":{"200":{"description":"Activated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","active","inactive"]},"currentSnapshotId":{"type":"string","nullable":true},"config":{"type":"object","nullable":true,"properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]},"hasDraft":{"type":"boolean"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"lastModifiedTime":{"type":"string","nullable":true},"nextRunAt":{"type":"string","nullable":true},"alertContact":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","nullable":true},"avatar":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","baseId","name","status","currentSnapshotId","config","hasDraft","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/activate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%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/base/%7BbaseId%7D/routine/%7BroutineId%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/base/%7BbaseId%7D/routine/%7BroutineId%7D/activate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}/deactivate":{"post":{"summary":"Pause routine","description":"Moves an active routine to paused; config is kept, no further planned runs.\n\nRequired token scopes: `routine|update`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"responses":{"200":{"description":"Paused","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","active","inactive"]},"currentSnapshotId":{"type":"string","nullable":true},"config":{"type":"object","nullable":true,"properties":{"prompt":{"type":"string","minLength":1},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]},"trigger":{"type":"object","properties":{"type":{"type":"string","enum":["schedule"]},"rrule":{"type":"string","minLength":1,"description":"RFC 5545 RRULE parts, e.g. 'FREQ=DAILY;BYHOUR=9;BYMINUTE=0'"},"timezone":{"type":"string","description":"IANA timezone, e.g. Asia/Shanghai"},"starting":{"type":"string","format":"date-time","description":"No runs before this moment; the DTSTART anchor for COUNT / INTERVAL"},"ending":{"type":"string","format":"date-time"}},"required":["type","rrule","timezone","starting"]},"maxRunMinutes":{"type":"integer","minimum":5,"maximum":120,"description":"Wall-clock limit for one run in minutes; a run past it is aborted and marked failed(timeout). Default 30."},"chatMode":{"type":"string","enum":["new","continue"],"description":"Where each run's conversation goes: 'new' (default) opens a fresh chat per run; 'continue' sends the run into the previous run's chat, so the agent sees what it did last time."}},"required":["prompt","trigger"]},"hasDraft":{"type":"boolean"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"lastModifiedTime":{"type":"string","nullable":true},"nextRunAt":{"type":"string","nullable":true},"alertContact":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","nullable":true},"avatar":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","baseId","name","status","currentSnapshotId","config","hasDraft","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/deactivate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%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/base/%7BbaseId%7D/routine/%7BroutineId%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/base/%7BbaseId%7D/routine/%7BroutineId%7D/deactivate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/routine/{routineId}/run-now":{"post":{"summary":"Run routine now","description":"Manually trigger one run. Fails when another run of the routine is still in flight or the space is out of credits.\n\nRequired token scopes: `routine|update`","tags":["routine"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"routineId","in":"path"}],"responses":{"201":{"description":"The created run","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string"}},"required":["runId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/run-now \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/routine/%7BroutineId%7D/run-now';\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/routine/%7BroutineId%7D/run-now',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/routine/%7BroutineId%7D/run-now\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/sql-query":{"post":{"description":"Execute a SQL query on tables in a project.\n\nRequired token scopes: `base|query_data`","summary":"Execute SQL query","tags":["base"],"x-mint":{"metadata":{"title":"Execute project SQL query","sidebarTitle":"Execute project SQL query","description":"Execute a SQL query on tables in a project."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The project ID to execute query on"},"required":true,"description":"The project 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 in a project.\n\nRequired token scopes: `base|query_data`","summary":"Sign attachment URLs","tags":["base"],"x-mint":{"metadata":{"title":"Sign project attachment URLs","sidebarTitle":"Sign project attachment URLs","description":"Generate signed URLs for attachment files in a project."}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The project ID"},"required":true,"description":"The project 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\n\nRequired token scopes: `base|read`","tags":["chat"],"x-mint":{"metadata":{"title":"Post project chatcreate","sidebarTitle":"Post project chatcreate","description":"Create chat"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"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}/sandbox/files/grant":{"get":{"description":"Issue a scoped grant (base URL + token) for direct access to the chat sandbox files\n\nRequired token scopes: `base|read`","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":"Sandbox file access grant"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/sandbox/files/grant \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/sandbox/files/grant';\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/sandbox/files/grant',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/sandbox/files/grant\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/sandbox/files/storage-usage":{"get":{"description":"Get whole-sandbox storage usage (uploads + outputs) for the chat sandbox meter\n\nRequired token scopes: `base|read`","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":"Sandbox storage usage"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/sandbox/files/storage-usage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/sandbox/files/storage-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/chat/%7BchatId%7D/sandbox/files/storage-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/chat/%7BchatId%7D/sandbox/files/storage-usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/messages":{"get":{"description":"Get chat messages\n\nRequired token scopes: `base|read`","tags":["chat"],"x-mint":{"metadata":{"title":"Get project chat messages","sidebarTitle":"Get project chat messages","description":"Get chat messages"}},"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\n\nRequired token scopes: `base|read`","tags":["chat"],"x-mint":{"metadata":{"title":"Delete project chat messages","sidebarTitle":"Delete project chat messages","description":"Clear all messages in a 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":"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\n\nRequired token scopes: `base|read`","tags":["chat"],"x-mint":{"metadata":{"title":"Get project chathistory","sidebarTitle":"Get project chathistory","description":"Get chat history"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string","description":"Chat type, or a comma-separated list of types (e.g. `sandboxAgent,appGen`). Omit for general + sandbox-agent chats. `routine` lists the base's routine runs (they belong to the routine bot, not the caller) and answers nothing without the permission that shares them."},"required":false,"description":"Chat type, or a comma-separated list of types (e.g. `sandboxAgent,appGen`). Omit for general + sandbox-agent chats. `routine` lists the base's routine runs (they belong to the routine bot, not the caller) and answers nothing without the permission that shares them.","name":"type","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"offset","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"},"resourceId":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"lastModifiedTime":{"type":"string"},"selectedModel":{"type":"string"},"selectedModelTier":{"type":"string","enum":["xl","lg","md","sm"]},"selectedEffort":{"type":"string","enum":["low","medium","high","xhigh"]},"pinned":{"type":"boolean"},"state":{"type":"string","enum":["idle","running","waiting_input","completed","failed"]},"unread":{"type":"boolean"},"order":{"type":"number"},"routine":{"type":"object","properties":{"routineId":{"type":"string"},"runId":{"type":"string"},"status":{"type":"string","enum":["pending","running","success","failed","canceled"]},"plannedAt":{"type":"string","nullable":true}},"required":["routineId","runId","status"]}},"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&limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_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&limit=SOME_INTEGER_VALUE&offset=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/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=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/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/delete":{"delete":{"tags":["chat"],"x-mint":{"metadata":{"title":"Delete project chat delete","sidebarTitle":"Delete project chat delete"}},"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"}},"description":"Required token scopes: `base|read`","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"],"x-mint":{"metadata":{"title":"Patch project chat rename","sidebarTitle":"Patch project chat rename"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Chat renamed"}},"description":"Required token scopes: `base|read`","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}/archive":{"patch":{"description":"Archive or restore a chat you own. Archived chats leave the base history and show up under the user-level archived list. Chats bound to a resource (App Builder `appGen` chats and the like) cannot be archived.\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"archived":{"type":"boolean"}},"required":["archived"]}}}},"responses":{"200":{"description":"Chat archived state updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/archive \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"archived\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/archive';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"archived\":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/chat/%7BchatId%7D/archive',\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({archived: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"archived\\\":true}\"\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/archive\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/archived":{"get":{"description":"Page through the archived chats of the current user across every base they can still open, most recently archived first.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["chat"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"Archived chats","content":{"application/json":{"schema":{"type":"object","properties":{"archived":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"baseId":{"type":"string"},"baseName":{"type":"string"},"baseIcon":{"type":"string"},"archivedTime":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","baseId","baseName","archivedTime","createdTime"]}},"total":{"type":"number"}},"required":["archived","total"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/chat/archived?limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/archived?limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/archived?limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/chat/archived?limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/archived/{chatId}/restore":{"post":{"description":"Put an archived chat you own back into its base history.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["chat"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"responses":{"200":{"description":"Chat restored"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/chat/archived/%7BchatId%7D/restore"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/archived/%7BchatId%7D/restore';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/archived/%7BchatId%7D/restore',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/chat/archived/%7BchatId%7D/restore\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/archived/{chatId}":{"delete":{"description":"Permanently delete an archived chat you own, with all of its messages.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["chat"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"responses":{"200":{"description":"Chat deleted"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/chat/archived/%7BchatId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/archived/%7BchatId%7D';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/chat/archived/%7BchatId%7D',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/chat/archived/%7BchatId%7D\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/recent":{"get":{"description":"Page through the chats of the current user across every base they can open (optionally one space), most recently active first, with each chat’s activity state.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["chat"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"spaceId","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"Recent chats","content":{"application/json":{"schema":{"type":"object","properties":{"list":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string"},"resourceId":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"lastModifiedTime":{"type":"string"},"selectedModel":{"type":"string"},"selectedModelTier":{"type":"string","enum":["xl","lg","md","sm"]},"selectedEffort":{"type":"string","enum":["low","medium","high","xhigh"]},"pinned":{"type":"boolean"},"state":{"type":"string","enum":["idle","running","waiting_input","completed","failed"]},"unread":{"type":"boolean"},"order":{"type":"number"},"routine":{"type":"object","properties":{"routineId":{"type":"string"},"runId":{"type":"string"},"status":{"type":"string","enum":["pending","running","success","failed","canceled"]},"plannedAt":{"type":"string","nullable":true}},"required":["routineId","runId","status"]},"baseId":{"type":"string"},"baseName":{"type":"string"},"baseIcon":{"type":"string"}},"required":["id","name","createdTime","createdBy","baseId","baseName"]}},"total":{"type":"number"}},"required":["list","total"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/chat/recent?spaceId=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/recent?spaceId=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/recent?spaceId=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/chat/recent?spaceId=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/read":{"post":{"description":"Mark a chat you own as read: assistant messages that settled before now no longer count as unread. A no-op for chats you do not own.\n\nRequired token scopes: `base|read`","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 marked as read"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/read \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/read';\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/read',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/read\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/queue/{messageId}":{"delete":{"description":"Remove a still-queued message.\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Queued message removed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/queue/%7BmessageId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/queue/%7BmessageId%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/chat/%7BchatId%7D/queue/%7BmessageId%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/chat/%7BchatId%7D/queue/%7BmessageId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/queue/resume":{"post":{"description":"Resume auto-dispatch after a stop paused the send queue.\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Queue resumed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/queue/resume \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/queue/resume';\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/queue/resume',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/queue/resume\", headers=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\n\nRequired token scopes: `base|read`","tags":["chat"],"x-mint":{"metadata":{"title":"Post project chat stop","sidebarTitle":"Post project chat stop","description":"Stop an active chat stream and prevent resume"}},"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"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\"))"}]}},"/chat/onboarding/scenarios":{"get":{"description":"Get onboarding scenarios with presigned URLs for attachments","tags":["chat"],"security":[],"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/onboarding/scenarios';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/chat/onboarding/scenarios\")\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":[],"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 '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: {'content-type': 'application/json'},\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 '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 = { 'content-type': \"application/json\" }\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\n\nRequired token scopes: `base|read`","tags":["chat"],"x-mint":{"metadata":{"title":"Post project chattext extract","sidebarTitle":"Post project chattext extract","description":"Extract text content from attachments"}},"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\n\nRequired token scopes: `base|update`","tags":["chat"],"x-mint":{"metadata":{"title":"Post project chatexecute script","sidebarTitle":"Post project chatexecute script","description":"Execute TypeScript code in sandbox for chat tools"}},"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\n\nRequired token scopes: `base|read`","tags":["chat"],"x-mint":{"metadata":{"title":"Post project chatresolve attachments","sidebarTitle":"Post project chatresolve attachments","description":"Resolve attachment tokens to presigned URLs"}},"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\"))"}]}},"/sandbox-agent/config":{"get":{"description":"Get public sandbox agent configuration\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["sandbox-agent"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Public agent config","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether sandbox agent is enabled for the queried space"},"defaultEffort":{"type":"string","enum":["low","medium","high","xhigh"],"description":"Default effort level for sandbox agent"},"models":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"description":"Available models keyed by agent name"},"newSessionAgent":{"type":"string","enum":["pi"],"description":"Default agent runtime every chat runs on (gates steering support in the UI)"}},"required":["enabled","defaultEffort","models"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/sandbox-agent/config"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox-agent/config';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/sandbox-agent/config',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/sandbox-agent/config\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/sandbox-agent/status":{"get":{"description":"Get current sandbox session status for the authenticated user\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["sandbox-agent"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Sandbox session status","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"},"createdAt":{"type":"string","nullable":true},"rotationThresholdMs":{"type":"number"},"executingCount":{"type":"number"}},"required":["active","createdAt","rotationThresholdMs","executingCount"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/sandbox-agent/status"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox-agent/status';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/sandbox-agent/status',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/sandbox-agent/status\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/sandbox-agent/reset":{"post":{"description":"Destroy the current sandbox so a fresh one is created on next message\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["sandbox-agent"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Sandbox destroyed successfully"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/sandbox-agent/reset"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox-agent/reset';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/sandbox-agent/reset',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/sandbox-agent/reset\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/tool-output":{"patch":{"description":"Update a tool part output within a chat message\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"toolCallId":{"type":"string","minLength":1},"output":{"nullable":true},"updatedInput":{"type":"object","additionalProperties":{"nullable":true}},"gateId":{"type":"string","minLength":1}},"required":["toolCallId"]}}}},"responses":{"200":{"description":"Success"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/tool-output \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"toolCallId\":\"string\",\"output\":null,\"updatedInput\":{\"property1\":null,\"property2\":null},\"gateId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/tool-output';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"toolCallId\":\"string\",\"output\":null,\"updatedInput\":{\"property1\":null,\"property2\":null},\"gateId\":\"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/tool-output',\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 toolCallId: 'string',\n output: null,\n updatedInput: {property1: null, property2: null},\n gateId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"toolCallId\\\":\\\"string\\\",\\\"output\\\":null,\\\"updatedInput\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"gateId\\\":\\\"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/tool-output\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/messages/{messageId}/metadata":{"get":{"description":"Get message metadata (usage, credit, context window)\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"messageId","in":"path"}],"responses":{"200":{"description":"Message metadata"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages/%7BmessageId%7D/metadata \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages/%7BmessageId%7D/metadata';\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/%7BmessageId%7D/metadata',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/%7BmessageId%7D/metadata\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/generation/status":{"get":{"description":"Get durable chat generation status\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"streamInstanceId","in":"query"}],"responses":{"200":{"description":"Durable generation status"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/generation/status?streamInstanceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/generation/status?streamInstanceId=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/%7BchatId%7D/generation/status?streamInstanceId=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/%7BchatId%7D/generation/status?streamInstanceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/messages/{messageId}/feedback":{"patch":{"description":"Set, update, or clear feedback (thumbs up/down) on an assistant message\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"messageId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","nullable":true,"enum":["thumbsUp","thumbsDown"]},"comment":{"type":"string","maxLength":2000}},"required":["type"]}}}},"responses":{"200":{"description":"Updated feedback (null if cleared)"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages/%7BmessageId%7D/feedback \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"thumbsUp\",\"comment\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages/%7BmessageId%7D/feedback';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"thumbsUp\",\"comment\":\"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/messages/%7BmessageId%7D/feedback',\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: 'thumbsUp', comment: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"thumbsUp\\\",\\\"comment\\\":\\\"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/messages/%7BmessageId%7D/feedback\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/warmup":{"post":{"description":"Warmup chat\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string"}}}}}},"responses":{"200":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/warmup \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"model\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/warmup';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"model\":\"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/%7BchatId%7D/warmup',\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({model: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"model\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/warmup\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/realtime-transcription/audio":{"post":{"description":"Transcribe a recorded audio clip for the authenticated user\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["chat"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"nullable":true,"description":"Recorded audio file"}}}}}},"responses":{"200":{"description":"Recorded audio transcription created","content":{"application/json":{"schema":{"type":"object","properties":{"transcript":{"type":"string"},"model":{"type":"string","enum":["gpt-4o-mini-transcribe","gpt-4o-transcribe","whisper-1","gpt-realtime-whisper"]}},"required":["transcript","model"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/chat/realtime-transcription/audio \\\n --header 'content-type: multipart/form-data' \\\n --form file=null"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/realtime-transcription/audio';\nconst form = new FormData();\nform.append('file', 'null');\n\nconst options = {method: 'POST'};\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/chat/realtime-transcription/audio',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.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\nconn.request(\"POST\", \"/api/chat/realtime-transcription/audio\", payload)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw":{"post":{"description":"Create a bot in a space\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"bases":{"type":"array","items":{"type":"object","properties":{"baseId":{"type":"string","minLength":1},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["baseId","role"]}}}}}}},"responses":{"201":{"description":"The created bot","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"chatId":{"type":"string","nullable":true},"imPlatform":{"type":"string","nullable":true,"enum":["telegram","feishu","slack"]},"avatar":{"type":"string","nullable":true},"accessibleBases":{"type":"array","items":{"type":"string"}},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]}},"required":["id","userId","name","description","createdBy","createdTime","chatId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"bases\":[{\"baseId\":\"string\",\"role\":\"owner\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw';\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\",\"bases\":[{\"baseId\":\"string\",\"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/claw',\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 bases: [{baseId: 'string', role: 'owner'}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"bases\\\":[{\\\"baseId\\\":\\\"string\\\",\\\"role\\\":\\\"owner\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/claw\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"List bots in a space\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","enum":["mine","all"]},"required":false,"name":"scope","in":"query"}],"responses":{"200":{"description":"Bots visible to the caller for the requested scope","content":{"application/json":{"schema":{"type":"object","properties":{"bots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"chatId":{"type":"string","nullable":true},"imPlatform":{"type":"string","nullable":true,"enum":["telegram","feishu","slack"]},"avatar":{"type":"string","nullable":true},"accessibleBases":{"type":"array","items":{"type":"string"}},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]}},"required":["id","userId","name","description","createdBy","createdTime","chatId"]}},"isSpaceAdmin":{"type":"boolean"}},"required":["bots","isSpaceAdmin"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/claw?scope=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw?scope=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/claw?scope=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/claw?scope=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}":{"patch":{"description":"Update a bot\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","maxLength":500},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]}}}}}},"responses":{"200":{"description":"The updated bot","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"chatId":{"type":"string","nullable":true},"imPlatform":{"type":"string","nullable":true,"enum":["telegram","feishu","slack"]},"avatar":{"type":"string","nullable":true},"accessibleBases":{"type":"array","items":{"type":"string"}},"model":{"type":"string"},"effort":{"type":"string","enum":["low","medium","high","xhigh"]}},"required":["id","userId","name","description","createdBy","createdTime","chatId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"model\":\"string\",\"effort\":\"low\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%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\",\"model\":\"string\",\"effort\":\"low\"}'\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/claw/%7BbotId%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', model: 'string', effort: 'low'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"model\\\":\\\"string\\\",\\\"effort\\\":\\\"low\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/claw/%7BbotId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a bot\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"responses":{"200":{"description":"The bot was deleted","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%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/claw/%7BbotId%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/claw/%7BbotId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/bases":{"get":{"description":"List projects a bot can access\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"responses":{"200":{"description":"Projects the bot can access","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"]}},"required":["id","name","role"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/bases \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/bases';\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/claw/%7BbotId%7D/bases',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/claw/%7BbotId%7D/bases\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Grant a bot access to a project (or update its role there)\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string","minLength":1},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["baseId","role"]}}}},"responses":{"201":{"description":"Updated list of projects the bot can access","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"]}},"required":["id","name","role"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/bases \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\",\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/bases';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"baseId\":\"string\",\"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/claw/%7BbotId%7D/bases',\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', role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\",\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/claw/%7BbotId%7D/bases\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/bases/{baseId}":{"delete":{"description":"Revoke a bot's access to a project\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"The bot was detached from the project","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/bases/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/bases/%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/space/%7BspaceId%7D/claw/%7BbotId%7D/bases/%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/space/%7BspaceId%7D/claw/%7BbotId%7D/bases/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/im-platforms":{"get":{"description":"List IM platforms a bot can be bound to in this space\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Connectable IM platforms","content":{"application/json":{"schema":{"type":"object","properties":{"platforms":{"type":"array","items":{"type":"string","enum":["telegram","feishu","slack"]}}},"required":["platforms"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/im-platforms \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/im-platforms';\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/claw/im-platforms',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/claw/im-platforms\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/im-link/generate":{"post":{"description":"Generate a link token to bind a bot to an IM channel\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["telegram","feishu","slack"]},"channelType":{"type":"string","enum":["dm","group"]}},"required":["platform","channelType"]}}}},"responses":{"201":{"description":"The generated link token and platform-specific link data","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"qrUrl":{"type":"string"},"verifyCommand":{"type":"string"},"expiresAt":{"type":"string"},"botName":{"type":"string"}},"required":["token","qrUrl","verifyCommand","expiresAt"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link/generate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"platform\":\"telegram\",\"channelType\":\"dm\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link/generate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"platform\":\"telegram\",\"channelType\":\"dm\"}'\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/claw/%7BbotId%7D/im-link/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({platform: 'telegram', channelType: 'dm'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"platform\\\":\\\"telegram\\\",\\\"channelType\\\":\\\"dm\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link/generate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/im-link/status":{"get":{"description":"Get the status of an IM link token\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"token","in":"query"}],"responses":{"200":{"description":"The link token status","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["pending","confirmed","expired"]}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link/status?token=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link/status?token=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/claw/%7BbotId%7D/im-link/status?token=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/claw/%7BbotId%7D/im-link/status?token=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/im-link":{"get":{"description":"Get the current IM binding of a bot\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"responses":{"200":{"description":"The IM binding, or null when the bot is not bound","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"platform":{"type":"string"},"channelType":{"type":"string"},"externalId":{"type":"string"},"lastActiveAt":{"type":"string"}},"required":["platform","channelType","externalId","lastActiveAt"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-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/claw/%7BbotId%7D/im-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/claw/%7BbotId%7D/im-link\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Unbind a bot from its IM channel\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"responses":{"200":{"description":"The bot was unbound","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link';\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/claw/%7BbotId%7D/im-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(\"DELETE\", \"/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/slack/channels":{"get":{"description":"List Slack channels visible to the user with bot-join and binding status\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"responses":{"200":{"description":"Slack channels with join/binding status","content":{"application/json":{"schema":{"type":"object","properties":{"needsConnect":{"type":"boolean"},"channels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isPrivate":{"type":"boolean"},"botJoined":{"type":"boolean"},"boundBotId":{"type":"string","nullable":true}},"required":["id","name","isPrivate","botJoined","boundBotId"]}},"error":{"type":"string"}},"required":["needsConnect","channels"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/slack/channels \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/slack/channels';\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/claw/%7BbotId%7D/slack/channels',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/claw/%7BbotId%7D/slack/channels\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/im-link/bind-direct":{"post":{"description":"Bind a bot directly to an IM channel or DM\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["telegram","feishu","slack"]},"channelType":{"type":"string","enum":["dm","group"]},"externalId":{"type":"string","minLength":1}},"required":["platform","channelType","externalId"]}}}},"responses":{"201":{"description":"The bot was bound","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link/bind-direct \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"platform\":\"telegram\",\"channelType\":\"dm\",\"externalId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link/bind-direct';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"platform\":\"telegram\",\"channelType\":\"dm\",\"externalId\":\"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/claw/%7BbotId%7D/im-link/bind-direct',\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({platform: 'telegram', channelType: 'dm', externalId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"platform\\\":\\\"telegram\\\",\\\"channelType\\\":\\\"dm\\\",\\\"externalId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/claw/%7BbotId%7D/im-link/bind-direct\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/avatar":{"patch":{"description":"Select a preset avatar for a bot\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"avatarId":{"type":"string","minLength":1}},"required":["avatarId"]}}}},"responses":{"200":{"description":"The newly-selected avatar URL","content":{"application/json":{"schema":{"type":"object","properties":{"avatar":{"type":"string"}},"required":["avatar"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/avatar \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"avatarId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/avatar';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"avatarId\":\"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/claw/%7BbotId%7D/avatar',\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({avatarId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"avatarId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/claw/%7BbotId%7D/avatar\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Upload a custom avatar for a bot\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"201":{"description":"The new avatar URL","content":{"application/json":{"schema":{"type":"object","properties":{"avatar":{"type":"string"}},"required":["avatar"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/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/space/%7BspaceId%7D/claw/%7BbotId%7D/avatar';\nconst form = new FormData();\nform.append('file', '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/space/%7BspaceId%7D/claw/%7BbotId%7D/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(\"POST\", \"/api/space/%7BspaceId%7D/claw/%7BbotId%7D/avatar\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/preset-avatars":{"get":{"description":"List preset avatars available for bots\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Preset avatars (id for selection, url for display)","content":{"application/json":{"schema":{"type":"object","properties":{"avatars":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"}},"required":["id","url"]}}},"required":["avatars"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/preset-avatars \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/preset-avatars';\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/claw/preset-avatars',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/claw/preset-avatars\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/sandbox/files/grant":{"get":{"description":"Issue a scoped grant (base URL + token) for direct access to the bot's sandbox files\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"responses":{"200":{"description":"Sandbox file access grant"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/sandbox/files/grant \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/sandbox/files/grant';\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/claw/%7BbotId%7D/sandbox/files/grant',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/claw/%7BbotId%7D/sandbox/files/grant\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/claw/{botId}/sandbox/files/storage-usage":{"get":{"description":"Get whole-sandbox storage usage (uploads + outputs) for the bot's sandbox meter\n\nRequired token scopes: `space|read`","tags":["cuppyclaw"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"botId","in":"path"}],"responses":{"200":{"description":"Sandbox storage usage"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/sandbox/files/storage-usage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/claw/%7BbotId%7D/sandbox/files/storage-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/claw/%7BbotId%7D/sandbox/files/storage-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/claw/%7BbotId%7D/sandbox/files/storage-usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/order":{"put":{"description":"Place a chat you own next to another one in the base's chat list. The list is per owner: chats never placed by hand lead it newest first, placed ones follow in their hand-made order. The first placement in a base freezes the current order for every chat there.\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","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":"Chat placed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%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/chat/%7BchatId%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/chat/%7BchatId%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/chat/%7BchatId%7D/order\", 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\n\nRequired token scopes: `space|update`","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\n\nRequired token scopes: `space|update`","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\n\nRequired token scopes: `space|update`","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\n\nRequired token scopes: `space|update`","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\n\nRequired token scopes: `space|update`","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":[],"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"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/authentication/providers';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/space/authentication/providers\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/domain-verification":{"delete":{"description":"Delete a space domain verification\n\nRequired token scopes: `space|update`","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\n\nRequired token scopes: `space|update`","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\n\nRequired token scopes: `space|update`","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\n\nRequired token scopes: `space|update`","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\"))"}]}},"/space/{spaceId}/scheduling-limits":{"get":{"description":"Get the space concurrency limits with their defaults and maxima\n\nRequired token scopes: `space|update`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"object","properties":{"ai-field-generation":{"type":"object","properties":{"limit":{"type":"integer","nullable":true},"effectiveLimit":{"type":"integer"},"defaultLimit":{"type":"integer"},"maxLimit":{"type":"integer"}},"required":["limit","effectiveLimit","defaultLimit","maxLimit"]}},"required":["ai-field-generation"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/scheduling-limits \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/scheduling-limits';\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/scheduling-limits',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/scheduling-limits\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update the space concurrency limits (bounded by the instance-configured maxima)\n\nRequired token scopes: `space|update`","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ai-field-generation":{"type":"object","nullable":true,"properties":{"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["limit"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"object","properties":{"ai-field-generation":{"type":"object","properties":{"limit":{"type":"integer","nullable":true},"effectiveLimit":{"type":"integer"},"defaultLimit":{"type":"integer"},"maxLimit":{"type":"integer"}},"required":["limit","effectiveLimit","defaultLimit","maxLimit"]}},"required":["ai-field-generation"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/scheduling-limits \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"ai-field-generation\":{\"limit\":1}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/scheduling-limits';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"ai-field-generation\":{\"limit\":1}}'\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/scheduling-limits',\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({'ai-field-generation': {limit: 1}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"ai-field-generation\\\":{\\\"limit\\\":1}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/scheduling-limits\", 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)\n\nRequired token scopes: `base|read`","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"},"reasoningEffort":{"type":"string","enum":["none","low","medium","high"],"description":"Reasoning effort forwarded to the provider. 'none' suppresses hidden thinking tokens entirely — for latency-critical structured output, thinking time is time-to-first-token."}},"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\",\"reasoningEffort\":\"none\"}'"},{"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\",\"reasoningEffort\":\"none\"}'\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({\n prompt: 'string',\n task: 'coding',\n modelKey: 'openai@gpt-4o@custom-name',\n reasoningEffort: 'none'\n}));\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\\\",\\\"reasoningEffort\\\":\\\"none\\\"}\"\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)\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["reward"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"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"},"resubmitCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"fetchFailed":{"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"]}}}},"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/claim \\\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,\"resubmitCount\":0,\"verifyResult\":{\"isValid\":true,\"fetchFailed\":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: {'content-type': 'application/json'},\n body: '{\"sourceType\":\"socialShare\",\"sourceMetaData\":{\"platform\":\"x\",\"postUrl\":\"string\",\"postId\":\"string\",\"snapshotId\":\"string\",\"content\":\"string\",\"username\":\"string\",\"followerCount\":0,\"resubmitCount\":0,\"verifyResult\":{\"isValid\":true,\"fetchFailed\":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 '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 resubmitCount: 0,\n verifyResult: {\n isValid: true,\n fetchFailed: 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,\\\"resubmitCount\\\":0,\\\"verifyResult\\\":{\\\"isValid\\\":true,\\\"fetchFailed\\\":true,\\\"errors\\\":[{\\\"message\\\":\\\"string\\\",\\\"localization\\\":{\\\"i18nKey\\\":\\\"string\\\",\\\"context\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}}]}}}\"\n\nheaders = { 'content-type': \"application/json\" }\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\n\nRequired token scopes: `space|read`","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"},"remainingAmount":{"type":"number"},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","sourceType","rewardStatus","rewardType","rewardAmount","consumedAmount","remainingAmount","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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["reward"],"security":[{"cookieAuth":[]}],"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"},"resubmitCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"fetchFailed":{"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-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/%7BrewardId%7D"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/%7BrewardId%7D';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/reward/%7BrewardId%7D\")\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.\n\nRequired token scopes: `instance|update`","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.\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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\n\nRequired token scopes: `instance|update`","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"},"resubmitCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"fetchFailed":{"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.\n\nRequired token scopes: `instance|update`","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\"))"}]}},"/base/{baseId}/scrape/datasets":{"get":{"description":"Search the full scraper catalog (beyond the curated list) by platform name\n\nRequired token scopes: `base|read`","tags":["scrape"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"Platform or data-type keywords, e.g. \"glassdoor reviews\""},"required":true,"description":"Platform or data-type keywords, e.g. \"glassdoor reviews\"","name":"q","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Matching scrapers with inferred input fields","content":{"application/json":{"schema":{"type":"object","properties":{"datasets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Raw scraper id (gd_...), usable as trigger datasetId"},"name":{"type":"string"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"description":"Input fields the scraper requires; absent when they could not be determined"},"modes":{"type":"array","items":{"type":"object","properties":{"discoverBy":{"type":"string","description":"Value to pass as discoverBy when triggering"},"inputs":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"description":"Input fields this mode requires; absent when they could not be determined"}},"required":["discoverBy"]},"description":"Discover modes the scraper supports besides collecting URLs; empty when it only collects, absent when they could not be determined"}},"required":["id","name"]}}},"required":["datasets"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/scrape/datasets?q=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/scrape/datasets?q=SOME_STRING_VALUE&limit=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/base/%7BbaseId%7D/scrape/datasets?q=SOME_STRING_VALUE&limit=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/base/%7BbaseId%7D/scrape/datasets?q=SOME_STRING_VALUE&limit=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/scrape/snapshot/{snapshotId}":{"get":{"description":"Poll for scrape result by snapshot ID\n\nRequired token scopes: `base|read`","tags":["scrape"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"snapshotId","in":"path"}],"responses":{"200":{"description":"Scrape result status","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["pending","ready","error"]},"data":{"nullable":true},"error":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/scrape/snapshot/%7BsnapshotId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/scrape/snapshot/%7BsnapshotId%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/scrape/snapshot/%7BsnapshotId%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/scrape/snapshot/%7BsnapshotId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/scrape/trigger":{"post":{"description":"Trigger a web scrape job and return a snapshot ID for polling\n\nRequired token scopes: `base|read`","tags":["scrape"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"datasetId":{"type":"string","description":"Catalog dataset id (e.g. linkedin_person_profile) or a raw scraper id (gd_...) found via dataset search"},"inputs":{"type":"array","items":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"}]}}]}},"description":"Array of input objects for the dataset (e.g. [{ url: \"...\" }, { url: \"...\" }]). Each object represents one item to scrape; values keep their JSON type."},"discoverBy":{"type":"string","minLength":1,"description":"Discover mode of a raw gd_ dataset id, as dataset search lists it under modes: records are found from the inputs (keyword, profile URL...) instead of collected from URLs. Catalog ids carry their own mode."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Records returned per input (a feed, search or comment list), default 10; a single page still yields one record"}},"required":["datasetId","inputs"]}}}},"responses":{"201":{"description":"Scrape triggered, returns snapshot ID","content":{"application/json":{"schema":{"type":"object","properties":{"snapshotId":{"type":"string"}},"required":["snapshotId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/scrape/trigger \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"datasetId\":\"string\",\"inputs\":[{\"property1\":\"string\",\"property2\":\"string\"}],\"discoverBy\":\"string\",\"limit\":1}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/scrape/trigger';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"datasetId\":\"string\",\"inputs\":[{\"property1\":\"string\",\"property2\":\"string\"}],\"discoverBy\":\"string\",\"limit\":1}'\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/scrape/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({\n datasetId: 'string',\n inputs: [{property1: 'string', property2: 'string'}],\n discoverBy: 'string',\n limit: 1\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"datasetId\\\":\\\"string\\\",\\\"inputs\\\":[{\\\"property1\\\":\\\"string\\\",\\\"property2\\\":\\\"string\\\"}],\\\"discoverBy\\\":\\\"string\\\",\\\"limit\\\":1}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/scrape/trigger\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/env-variable":{"get":{"summary":"List env variables","description":"List env variables by scope. scopeId is required for app and automation scope; omit for user scope.","tags":["env-variable"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["user","app","automation"]},"required":true,"name":"scope","in":"query"},{"schema":{"type":"string"},"required":false,"name":"scopeId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"scope":{"type":"string","enum":["user","app","automation"]},"scopeId":{"type":"string"},"key":{"type":"string"},"description":{"type":"string","nullable":true},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["id","scope","scopeId","key","createdBy","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/env-variable?scope=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/env-variable?scope=SOME_STRING_VALUE&scopeId=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/env-variable?scope=SOME_STRING_VALUE&scopeId=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/env-variable?scope=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"summary":"Upsert env variable","description":"Create or update env variable by scope + key. scopeId is required for app and automation scope.","tags":["env-variable"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"scope":{"type":"string","enum":["user"]},"scopeId":{"type":"string"},"key":{"type":"string","pattern":"^[A-Z][A-Z0-9_]{0,63}$"},"value":{"type":"string","minLength":1,"maxLength":8192},"description":{"type":"string","nullable":true}},"required":["scope","key","value"]},{"type":"object","properties":{"scope":{"type":"string","enum":["app"]},"scopeId":{"type":"string"},"key":{"type":"string","pattern":"^[A-Z][A-Z0-9_]{0,63}$"},"value":{"type":"string","minLength":1,"maxLength":8192},"description":{"type":"string","nullable":true}},"required":["scope","scopeId","key","value"]},{"type":"object","properties":{"scope":{"type":"string","enum":["automation"]},"scopeId":{"type":"string"},"key":{"type":"string","pattern":"^[A-Z][A-Z0-9_]{0,63}$"},"value":{"type":"string","minLength":1,"maxLength":8192},"description":{"type":"string","nullable":true}},"required":["scope","scopeId","key","value"]}]}}}},"responses":{"201":{"description":"Created or updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"scope":{"type":"string","enum":["user","app","automation"]},"scopeId":{"type":"string"},"key":{"type":"string"},"description":{"type":"string","nullable":true},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["id","scope","scopeId","key","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/env-variable \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"scope\":\"user\",\"scopeId\":\"string\",\"key\":\"string\",\"value\":\"string\",\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/env-variable';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"scope\":\"user\",\"scopeId\":\"string\",\"key\":\"string\",\"value\":\"string\",\"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: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/env-variable',\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 scope: 'user',\n scopeId: 'string',\n key: 'string',\n value: 'string',\n description: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"scope\\\":\\\"user\\\",\\\"scopeId\\\":\\\"string\\\",\\\"key\\\":\\\"string\\\",\\\"value\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/env-variable\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/env-variable/{id}":{"patch":{"summary":"Update env variable","description":"Partial update of value / description by id.","tags":["env-variable"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string","minLength":1,"maxLength":8192},"description":{"type":"string","nullable":true,"maxLength":500}}}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"scope":{"type":"string","enum":["user","app","automation"]},"scopeId":{"type":"string"},"key":{"type":"string"},"description":{"type":"string","nullable":true},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["id","scope","scopeId","key","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/env-variable/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"value\":\"string\",\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/env-variable/%7Bid%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"value\":\"string\",\"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/env-variable/%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({value: 'string', description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"value\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/env-variable/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete env variable","tags":["env-variable"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/env-variable/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/env-variable/%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/env-variable/%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/env-variable/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/credential":{"get":{"summary":"List my credentials","description":"The caller's personal secrets and OAuth connections, each with the resources it is granted to. Values are never returned.","tags":["credential"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"description":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true},"usages":{"type":"array","items":{"type":"object","properties":{"grantId":{"type":"string"},"alias":{"type":"string"},"resourceType":{"type":"string","enum":["automation","app"]},"resourceId":{"type":"string"},"resourceName":{"type":"string","nullable":true},"resourceDeleted":{"type":"boolean"},"baseId":{"type":"string"},"baseName":{"type":"string","nullable":true},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"inSpace":{"type":"boolean"},"createdTime":{"type":"string"}},"required":["grantId","alias","resourceType","resourceId","resourceName","resourceDeleted","baseId","baseName","spaceId","spaceName","inSpace","createdTime"]}}},"required":["id","key","description","createdTime","lastModifiedTime","usages"]}},"connections":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"connectedTime":{"type":"string","nullable":true},"lastUsedTime":{"type":"string","nullable":true},"usages":{"type":"array","items":{"type":"object","properties":{"grantId":{"type":"string"},"alias":{"type":"string"},"resourceType":{"type":"string","enum":["automation","app"]},"resourceId":{"type":"string"},"resourceName":{"type":"string","nullable":true},"resourceDeleted":{"type":"boolean"},"baseId":{"type":"string"},"baseName":{"type":"string","nullable":true},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"inSpace":{"type":"boolean"},"createdTime":{"type":"string"}},"required":["grantId","alias","resourceType","resourceId","resourceName","resourceDeleted","baseId","baseName","spaceId","spaceName","inSpace","createdTime"]}},"source":{"type":"string","enum":["native"]},"provider":{"type":"string","enum":["slack","gmail","outlook","airtable","googleSheet"]}},"required":["id","name","connectedTime","lastUsedTime","usages","source","provider"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"connectedTime":{"type":"string","nullable":true},"lastUsedTime":{"type":"string","nullable":true},"usages":{"type":"array","items":{"type":"object","properties":{"grantId":{"type":"string"},"alias":{"type":"string"},"resourceType":{"type":"string","enum":["automation","app"]},"resourceId":{"type":"string"},"resourceName":{"type":"string","nullable":true},"resourceDeleted":{"type":"boolean"},"baseId":{"type":"string"},"baseName":{"type":"string","nullable":true},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"inSpace":{"type":"boolean"},"createdTime":{"type":"string"}},"required":["grantId","alias","resourceType","resourceId","resourceName","resourceDeleted","baseId","baseName","spaceId","spaceName","inSpace","createdTime"]}},"source":{"type":"string","enum":["composio"]},"provider":{"type":"string"}},"required":["id","name","connectedTime","lastUsedTime","usages","source","provider"]}]}}},"required":["secrets","connections"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/credential \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/credential';\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/credential',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/credential\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/credential/resource/{resourceType}/{resourceId}":{"get":{"summary":"List credentials bound to a resource","description":"Grants on an automation / app (with owner and whether the owner is still in the space) plus the unbound placeholders it still needs.","tags":["credential"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["automation","app"]},"required":true,"name":"resourceType","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"grants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"credentialType":{"type":"string","enum":["secret","connection"]},"credentialId":{"type":"string"},"alias":{"type":"string"},"resourceType":{"type":"string","enum":["automation","app"]},"resourceId":{"type":"string"},"baseId":{"type":"string"},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"inSpace":{"type":"boolean"},"isMe":{"type":"boolean"}},"required":["id","name","avatar","inSpace","isMe"]},"credential":{"type":"object","properties":{"name":{"type":"string"},"key":{"type":"string"},"provider":{"type":"string"},"source":{"type":"string","enum":["native","composio"]},"account":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"missing":{"type":"boolean"}},"required":["name","missing"]},"createdTime":{"type":"string"}},"required":["id","credentialType","credentialId","alias","resourceType","resourceId","baseId","owner","credential","createdTime"]}},"slots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"credentialType":{"type":"string","enum":["secret","connection"]},"provider":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","alias","credentialType","provider","createdTime"]}}},"required":["grants","slots"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/credential/resource/%7BresourceType%7D/%7BresourceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/credential/resource/%7BresourceType%7D/%7BresourceId%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/credential/resource/%7BresourceType%7D/%7BresourceId%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/credential/resource/%7BresourceType%7D/%7BresourceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/credential/secret":{"post":{"summary":"Create a personal secret","description":"Store a secret under the caller (write-only) and optionally grant it to a resource in the same call. The value never leaves the server afterwards.","tags":["credential"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","pattern":"^[A-Z][A-Z0-9_]{0,63}$"},"value":{"type":"string","minLength":1,"maxLength":8192},"description":{"type":"string","nullable":true,"maxLength":500},"onConflict":{"type":"string","enum":["error","rotate"]},"grantTo":{"type":"object","properties":{"resourceType":{"type":"string","enum":["automation","app"]},"resourceId":{"type":"string","minLength":1},"alias":{"type":"string","pattern":"^[A-Z][A-Z0-9_]{0,63}$"},"replace":{"type":"boolean"}},"required":["resourceType","resourceId"]}},"required":["key","value"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"secret":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"description":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true},"usages":{"type":"array","items":{"type":"object","properties":{"grantId":{"type":"string"},"alias":{"type":"string"},"resourceType":{"type":"string","enum":["automation","app"]},"resourceId":{"type":"string"},"resourceName":{"type":"string","nullable":true},"resourceDeleted":{"type":"boolean"},"baseId":{"type":"string"},"baseName":{"type":"string","nullable":true},"spaceId":{"type":"string","nullable":true},"spaceName":{"type":"string","nullable":true},"inSpace":{"type":"boolean"},"createdTime":{"type":"string"}},"required":["grantId","alias","resourceType","resourceId","resourceName","resourceDeleted","baseId","baseName","spaceId","spaceName","inSpace","createdTime"]}}},"required":["id","key","description","createdTime","lastModifiedTime","usages"]},"grant":{"type":"object","properties":{"id":{"type":"string"},"credentialType":{"type":"string","enum":["secret","connection"]},"credentialId":{"type":"string"},"alias":{"type":"string"},"resourceType":{"type":"string","enum":["automation","app"]},"resourceId":{"type":"string"},"baseId":{"type":"string"},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"inSpace":{"type":"boolean"},"isMe":{"type":"boolean"}},"required":["id","name","avatar","inSpace","isMe"]},"credential":{"type":"object","properties":{"name":{"type":"string"},"key":{"type":"string"},"provider":{"type":"string"},"source":{"type":"string","enum":["native","composio"]},"account":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"missing":{"type":"boolean"}},"required":["name","missing"]},"createdTime":{"type":"string"}},"required":["id","credentialType","credentialId","alias","resourceType","resourceId","baseId","owner","credential","createdTime"]}},"required":["secret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/credential/secret \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"key\":\"string\",\"value\":\"string\",\"description\":\"string\",\"onConflict\":\"error\",\"grantTo\":{\"resourceType\":\"automation\",\"resourceId\":\"string\",\"alias\":\"string\",\"replace\":true}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/credential/secret';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"key\":\"string\",\"value\":\"string\",\"description\":\"string\",\"onConflict\":\"error\",\"grantTo\":{\"resourceType\":\"automation\",\"resourceId\":\"string\",\"alias\":\"string\",\"replace\":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/credential/secret',\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 key: 'string',\n value: 'string',\n description: 'string',\n onConflict: 'error',\n grantTo: {\n resourceType: 'automation',\n resourceId: 'string',\n alias: 'string',\n replace: true\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"key\\\":\\\"string\\\",\\\"value\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"onConflict\\\":\\\"error\\\",\\\"grantTo\\\":{\\\"resourceType\\\":\\\"automation\\\",\\\"resourceId\\\":\\\"string\\\",\\\"alias\\\":\\\"string\\\",\\\"replace\\\":true}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/credential/secret\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/credential/grant":{"post":{"summary":"Grant one of my credentials to a resource","description":"Only the credential owner can grant it, and only to resources they can edit. An alias already bound on the resource is replaced only with `replace: true`.","tags":["credential"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["automation","app"]},"resourceId":{"type":"string","minLength":1},"alias":{"type":"string","pattern":"^[A-Z][A-Z0-9_]{0,63}$"},"replace":{"type":"boolean"},"credentialType":{"type":"string","enum":["secret","connection"]},"credentialId":{"type":"string","minLength":1}},"required":["resourceType","resourceId","credentialType","credentialId"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"credentialType":{"type":"string","enum":["secret","connection"]},"credentialId":{"type":"string"},"alias":{"type":"string"},"resourceType":{"type":"string","enum":["automation","app"]},"resourceId":{"type":"string"},"baseId":{"type":"string"},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"inSpace":{"type":"boolean"},"isMe":{"type":"boolean"}},"required":["id","name","avatar","inSpace","isMe"]},"credential":{"type":"object","properties":{"name":{"type":"string"},"key":{"type":"string"},"provider":{"type":"string"},"source":{"type":"string","enum":["native","composio"]},"account":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"missing":{"type":"boolean"}},"required":["name","missing"]},"createdTime":{"type":"string"}},"required":["id","credentialType","credentialId","alias","resourceType","resourceId","baseId","owner","credential","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/credential/grant \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"resourceType\":\"automation\",\"resourceId\":\"string\",\"alias\":\"string\",\"replace\":true,\"credentialType\":\"secret\",\"credentialId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/credential/grant';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"resourceType\":\"automation\",\"resourceId\":\"string\",\"alias\":\"string\",\"replace\":true,\"credentialType\":\"secret\",\"credentialId\":\"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/credential/grant',\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: 'automation',\n resourceId: 'string',\n alias: 'string',\n replace: true,\n credentialType: 'secret',\n credentialId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"resourceType\\\":\\\"automation\\\",\\\"resourceId\\\":\\\"string\\\",\\\"alias\\\":\\\"string\\\",\\\"replace\\\":true,\\\"credentialType\\\":\\\"secret\\\",\\\"credentialId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/credential/grant\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/credential/grant/{grantId}":{"delete":{"summary":"Revoke a grant","description":"Allowed for the credential owner and for anyone who can edit the resource. By default a placeholder is left so editors see the gap; pass keepSlot=false when the resource no longer needs it.","tags":["credential"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"grantId","in":"path"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"keepSlot","in":"query"}],"responses":{"204":{"description":"Deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/credential/grant/%7BgrantId%7D?keepSlot=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/credential/grant/%7BgrantId%7D?keepSlot=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/credential/grant/%7BgrantId%7D?keepSlot=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/credential/grant/%7BgrantId%7D?keepSlot=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/credential/resource/{resourceType}/{resourceId}/connection-token":{"post":{"summary":"Exchange a granted connection for an access token","description":"For code running as the resource only (the app’s own token, or the automation runtime token). The connection must be granted to the resource.","tags":["credential"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["automation","app"]},"required":true,"name":"resourceType","in":"path"},{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[A-Z][A-Z0-9_]{0,63}$"},"credentialId":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"provider":{"type":"string","enum":["slack","gmail","outlook","airtable","googleSheet"]},"credentialId":{"type":"string"},"alias":{"type":"string"}},"required":["accessToken","provider","credentialId","alias"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/credential/resource/%7BresourceType%7D/%7BresourceId%7D/connection-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"alias\":\"string\",\"credentialId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/credential/resource/%7BresourceType%7D/%7BresourceId%7D/connection-token';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"alias\":\"string\",\"credentialId\":\"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/credential/resource/%7BresourceType%7D/%7BresourceId%7D/connection-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({alias: 'string', credentialId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"alias\\\":\\\"string\\\",\\\"credentialId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/credential/resource/%7BresourceType%7D/%7BresourceId%7D/connection-token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/composio/toolkits":{"get":{"summary":"List Composio toolkits","description":"List the Composio toolkits enabled on this deployment and the caller connection status for each.\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enabled toolkits and their connection status","content":{"application/json":{"schema":{"type":"object","properties":{"toolkits":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["composio"]},"toolkit":{"type":"string","description":"Composio toolkit slug, e.g. github"},"name":{"type":"string"},"isConnected":{"type":"boolean"},"needsCredential":{"type":"boolean"},"integrationId":{"type":"string"},"connectedAccountId":{"type":"string"},"lastUsedTime":{"type":"string"},"connectedTime":{"type":"string"}},"required":["source","toolkit","name","isConnected","needsCredential"]}}},"required":["toolkits"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/user-integrations/composio/toolkits \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/composio/toolkits';\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/composio/toolkits',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/composio/toolkits\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/composio/{toolkit}/authorize":{"post":{"summary":"Start a Composio connection","description":"Returns a hosted Connect Link for the toolkit. Teable never builds a provider OAuth flow for this source.\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"toolkit","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"callbackUrl":{"type":"string","description":"Where Composio sends the user after they authorize. Defaults to the integrations page."}}}}}},"responses":{"200":{"description":"Connect Link for the caller to visit","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string","description":"Composio's hosted Connect Link — send the user here."}},"required":["redirectUrl"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-integrations/composio/%7Btoolkit%7D/authorize \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"callbackUrl\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/composio/%7Btoolkit%7D/authorize';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"callbackUrl\":\"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-integrations/composio/%7Btoolkit%7D/authorize',\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({callbackUrl: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"callbackUrl\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user-integrations/composio/%7Btoolkit%7D/authorize\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/composio/sync":{"post":{"summary":"Reconcile Composio connections","description":"Pull the caller connection state from Composio into user_integration. Call this after the user returns from a Connect Link.\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Toolkits after reconciliation","content":{"application/json":{"schema":{"type":"object","properties":{"toolkits":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["composio"]},"toolkit":{"type":"string","description":"Composio toolkit slug, e.g. github"},"name":{"type":"string"},"isConnected":{"type":"boolean"},"needsCredential":{"type":"boolean"},"integrationId":{"type":"string"},"connectedAccountId":{"type":"string"},"lastUsedTime":{"type":"string"},"connectedTime":{"type":"string"}},"required":["source","toolkit","name","isConnected","needsCredential"]}}},"required":["toolkits"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-integrations/composio/sync \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/composio/sync';\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/user-integrations/composio/sync',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/user-integrations/composio/sync\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/composio/{integrationId}":{"delete":{"summary":"Disconnect a Composio integration","description":"Releases the authorization upstream and removes the local record.\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"responses":{"200":{"description":"Disconnected"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/user-integrations/composio/%7BintegrationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/composio/%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/composio/%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/composio/%7BintegrationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/composio/tools/search":{"post":{"summary":"Search Composio tools","description":"Discover tools for a task. Callers must never hardcode a tool slug — resolve it here first.\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"description":"What the caller is trying to do, in natural language"}},"required":["query"]}}}},"responses":{"200":{"description":"Matching tools, their schemas and a suggested plan","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"nullable":true},"connectable":{"type":"array","items":{"type":"object","properties":{"toolkit":{"type":"string"},"name":{"type":"string"}},"required":["toolkit","name"]}}},"required":["connectable"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-integrations/composio/tools/search \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"query\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/composio/tools/search';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"query\":\"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-integrations/composio/tools/search',\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({query: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"query\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user-integrations/composio/tools/search\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/composio/tools/execute":{"post":{"summary":"Execute a Composio tool","description":"Run one tool as the caller, through the caller's Composio connections. The toolkit must be on the deployment allowlist.\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"toolSlug":{"type":"string","minLength":1,"description":"Tool slug from a search, e.g. GITHUB_GET_THE_AUTHENTICATED_USER"},"arguments":{"type":"object","additionalProperties":{"nullable":true},"default":{},"description":"The tool's input"}},"required":["toolSlug"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"nullable":true},"error":{"type":"string","nullable":true},"logId":{"type":"string","description":"Handle for this call in the Composio dashboard"}},"required":["error"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-integrations/composio/tools/execute \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"toolSlug\":\"string\",\"arguments\":{}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/composio/tools/execute';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"toolSlug\":\"string\",\"arguments\":{}}'\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-integrations/composio/tools/execute',\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({toolSlug: 'string', arguments: {}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"toolSlug\\\":\\\"string\\\",\\\"arguments\\\":{}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user-integrations/composio/tools/execute\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/composio/{toolkit}/auth-fields":{"get":{"summary":"Fields to connect a Composio toolkit with an entered credential","description":"What the user has to enter to connect the toolkit, as Composio describes it. Only for toolkits whose `needsCredential` is true.\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"toolkit","in":"path"}],"responses":{"200":{"description":"The fields to collect","content":{"application/json":{"schema":{"type":"object","properties":{"scheme":{"type":"string","enum":["API_KEY","BEARER_TOKEN","BASIC"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The key to send the value under"},"displayName":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"},"isSecret":{"type":"boolean"},"defaultValue":{"type":"string"}},"required":["name","displayName","description","required","isSecret"]}}},"required":["scheme","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/user-integrations/composio/%7Btoolkit%7D/auth-fields \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/composio/%7Btoolkit%7D/auth-fields';\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/composio/%7Btoolkit%7D/auth-fields',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/composio/%7Btoolkit%7D/auth-fields\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/composio/{toolkit}/connect":{"post":{"summary":"Connect a Composio toolkit with an entered credential","description":"Hands the entered values to Composio, which verifies them and holds them. Teable stores only the resulting connected-account reference. Responds with the reconciled toolkit list.\n\nRequired token scopes: `user|integrations`","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"toolkit","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"values":{"type":"object","additionalProperties":{"type":"string"}}},"required":["values"]}}}},"responses":{"200":{"description":"Toolkits after the connection was made","content":{"application/json":{"schema":{"type":"object","properties":{"toolkits":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["composio"]},"toolkit":{"type":"string","description":"Composio toolkit slug, e.g. github"},"name":{"type":"string"},"isConnected":{"type":"boolean"},"needsCredential":{"type":"boolean"},"integrationId":{"type":"string"},"connectedAccountId":{"type":"string"},"lastUsedTime":{"type":"string"},"connectedTime":{"type":"string"}},"required":["source","toolkit","name","isConnected","needsCredential"]}}},"required":["toolkits"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-integrations/composio/%7Btoolkit%7D/connect \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"values\":{\"property1\":\"string\",\"property2\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/composio/%7Btoolkit%7D/connect';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"values\":{\"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/user-integrations/composio/%7Btoolkit%7D/connect',\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({values: {property1: 'string', property2: 'string'}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"values\\\":{\\\"property1\\\":\\\"string\\\",\\\"property2\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user-integrations/composio/%7Btoolkit%7D/connect\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/skill/available":{"get":{"summary":"List available skills","description":"List enabled skills for chat slash-command suggestions.","tags":["skill"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["user","base","app","cuppyclaw","routine","space","system"],"description":"Listing context: user, base (project), app, cuppyclaw bot, routine, space or system"},"required":true,"description":"Listing context: user, base (project), app, cuppyclaw bot, routine, space or system","name":"scopeType","in":"query"},{"schema":{"type":"string","description":"Scope entity ID (required for base/app/cuppyclaw/routine/space)"},"required":false,"description":"Scope entity ID (required for base/app/cuppyclaw/routine/space)","name":"scopeId","in":"query"},{"schema":{"type":"string","description":"Project ID (required for user scope) — folds in project and space scoped skills"},"required":false,"description":"Project ID (required for user scope) — folds in project and space scoped skills","name":"baseId","in":"query"}],"responses":{"200":{"description":"Available skills list","content":{"application/json":{"schema":{"type":"object","properties":{"skills":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"icon":{"type":"string","nullable":true},"scopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"]}},"required":["id","slug","name","scopeType"]}}},"required":["skills"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/skill/available?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/skill/available?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&baseId=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/skill/available?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&baseId=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/skill/available?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/skill/managed":{"get":{"summary":"List managed skills","description":"List all installed skills for the settings UI.","tags":["skill"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["user","base","app","cuppyclaw","routine","space","system"],"description":"Listing context: user, base (project), app, cuppyclaw bot, routine, space or system"},"required":true,"description":"Listing context: user, base (project), app, cuppyclaw bot, routine, space or system","name":"scopeType","in":"query"},{"schema":{"type":"string","description":"Scope entity ID (required for base/app/cuppyclaw/routine/space)"},"required":false,"description":"Scope entity ID (required for base/app/cuppyclaw/routine/space)","name":"scopeId","in":"query"},{"schema":{"type":"string","description":"Project ID — includes project- and space-scoped skills when provided"},"required":false,"description":"Project ID — includes project- and space-scoped skills when provided","name":"baseId","in":"query"}],"responses":{"200":{"description":"Managed skills list","content":{"application/json":{"schema":{"type":"object","properties":{"skills":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique skill identifier"},"slug":{"type":"string","description":"URL-safe skill slug"},"name":{"type":"string","description":"Display name of the skill"},"description":{"type":"string","nullable":true,"description":"Short description of what the skill does"},"icon":{"type":"string","nullable":true,"description":"Icon identifier or emoji"},"skillMd":{"type":"string","description":"SKILL.md content defining the skill"},"sourceMeta":{"nullable":true,"description":"Source metadata (github/zip/manual)"},"contentHash":{"type":"string","nullable":true,"description":"SHA-256 content hash for change detection"},"scopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"],"description":"Ownership scope: base (project), space, system, user, app, cuppyclaw or routine"},"isEnabled":{"type":"boolean","description":"Whether the skill is enabled / available to the agent"},"createdTime":{"type":"string","description":"ISO 8601 creation timestamp"},"createdBy":{"type":"string","description":"User ID of the creator"}},"required":["id","slug","name","skillMd","scopeType","isEnabled","createdTime","createdBy"]}}},"required":["skills"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/skill/managed?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/skill/managed?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&baseId=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/skill/managed?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&baseId=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/skill/managed?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&baseId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/skill/github":{"post":{"summary":"Import skill from GitHub","description":"Import a skill from a GitHub repository URL.","tags":["skill"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"scopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"],"description":"Ownership scope"},"scopeId":{"type":"string","description":"Scope entity ID (required for base/space/app/cuppyclaw/routine)"},"url":{"type":"string","format":"uri","description":"GitHub URL pointing to a skill folder; must include /tree/[/ or /blob/][/ (plain repo URLs are rejected), e.g. https://github.com/owner/repo/tree/main/path/to/skill"}},"required":["scopeType","url"]}}}},"responses":{"200":{"description":"Imported skill","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique skill identifier"},"slug":{"type":"string","description":"URL-safe skill slug"},"name":{"type":"string","description":"Display name of the skill"},"description":{"type":"string","nullable":true,"description":"Short description of what the skill does"},"icon":{"type":"string","nullable":true,"description":"Icon identifier or emoji"},"skillMd":{"type":"string","description":"SKILL.md content defining the skill"},"sourceMeta":{"nullable":true,"description":"Source metadata (github/zip/manual)"},"contentHash":{"type":"string","nullable":true,"description":"SHA-256 content hash for change detection"},"scopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"],"description":"Ownership scope: base (project), space, system, user, app, cuppyclaw or routine"},"isEnabled":{"type":"boolean","description":"Whether the skill is enabled / available to the agent"},"createdTime":{"type":"string","description":"ISO 8601 creation timestamp"},"createdBy":{"type":"string","description":"User ID of the creator"}},"required":["id","slug","name","skillMd","scopeType","isEnabled","createdTime","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/skill/github \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"scopeType\":\"base\",\"scopeId\":\"string\",\"url\":\"http://example.com\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/skill/github';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"scopeType\":\"base\",\"scopeId\":\"string\",\"url\":\"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/skill/github',\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({scopeType: 'base', scopeId: 'string', url: 'http://example.com'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"scopeType\\\":\\\"base\\\",\\\"scopeId\\\":\\\"string\\\",\\\"url\\\":\\\"http://example.com\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/skill/github\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/skill":{"post":{"summary":"Import skill from file","description":"Import a skill from a .zip or .skill file upload. Both extensions are accepted; the file content must be a valid ZIP archive (a .skill file is a renamed .zip).","tags":["skill"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"allOf":[{"type":"object","properties":{"file":{"nullable":true,"description":"Skill file (.zip or .skill); content must be a valid ZIP archive (a .skill file is a renamed .zip)"}}},{"type":"object","properties":{"scopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"],"description":"Ownership scope"},"scopeId":{"type":"string","description":"Scope entity ID (required for base/space/app/cuppyclaw/routine)"}},"required":["scopeType"]}]}}}},"responses":{"200":{"description":"Imported skill","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique skill identifier"},"slug":{"type":"string","description":"URL-safe skill slug"},"name":{"type":"string","description":"Display name of the skill"},"description":{"type":"string","nullable":true,"description":"Short description of what the skill does"},"icon":{"type":"string","nullable":true,"description":"Icon identifier or emoji"},"skillMd":{"type":"string","description":"SKILL.md content defining the skill"},"sourceMeta":{"nullable":true,"description":"Source metadata (github/zip/manual)"},"contentHash":{"type":"string","nullable":true,"description":"SHA-256 content hash for change detection"},"scopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"],"description":"Ownership scope: base (project), space, system, user, app, cuppyclaw or routine"},"isEnabled":{"type":"boolean","description":"Whether the skill is enabled / available to the agent"},"createdTime":{"type":"string","description":"ISO 8601 creation timestamp"},"createdBy":{"type":"string","description":"User ID of the creator"}},"required":["id","slug","name","skillMd","scopeType","isEnabled","createdTime","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/skill \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form file=null \\\n --form scopeType=base \\\n --form scopeId=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/skill';\nconst form = new FormData();\nform.append('file', 'null');\nform.append('scopeType', 'base');\nform.append('scopeId', '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/skill',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.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\\nContent-Disposition: form-data; name=\"scopeType\"\\r\\n\\r\\nbase\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"scopeId\"\\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\\nnull\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"scopeType\\\"\\r\\n\\r\\nbase\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"scopeId\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/skill\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/skill/{id}/sync":{"post":{"summary":"Sync skill from source","description":"Re-sync a GitHub-sourced skill with its upstream repository.","tags":["skill"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Skill ID"},"required":true,"description":"Skill ID","name":"id","in":"path"}],"responses":{"200":{"description":"Synced skill","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique skill identifier"},"slug":{"type":"string","description":"URL-safe skill slug"},"name":{"type":"string","description":"Display name of the skill"},"description":{"type":"string","nullable":true,"description":"Short description of what the skill does"},"icon":{"type":"string","nullable":true,"description":"Icon identifier or emoji"},"skillMd":{"type":"string","description":"SKILL.md content defining the skill"},"sourceMeta":{"nullable":true,"description":"Source metadata (github/zip/manual)"},"contentHash":{"type":"string","nullable":true,"description":"SHA-256 content hash for change detection"},"scopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"],"description":"Ownership scope: base (project), space, system, user, app, cuppyclaw or routine"},"isEnabled":{"type":"boolean","description":"Whether the skill is enabled / available to the agent"},"createdTime":{"type":"string","description":"ISO 8601 creation timestamp"},"createdBy":{"type":"string","description":"User ID of the creator"}},"required":["id","slug","name","skillMd","scopeType","isEnabled","createdTime","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/skill/%7Bid%7D/sync \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/skill/%7Bid%7D/sync';\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/skill/%7Bid%7D/sync',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/skill/%7Bid%7D/sync\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/skill/{id}":{"patch":{"summary":"Update skill metadata","description":"Update icon or enabled state of a skill.","tags":["skill"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Skill ID"},"required":true,"description":"Skill ID","name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"icon":{"type":"string","nullable":true,"description":"Emoji or icon string, e.g. \"📊\"; set to null to clear"},"isEnabled":{"type":"boolean","description":"Enable or disable the skill for agent use"}}}}}},"responses":{"200":{"description":"Updated skill","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique skill identifier"},"slug":{"type":"string","description":"URL-safe skill slug"},"name":{"type":"string","description":"Display name of the skill"},"description":{"type":"string","nullable":true,"description":"Short description of what the skill does"},"icon":{"type":"string","nullable":true,"description":"Icon identifier or emoji"},"skillMd":{"type":"string","description":"SKILL.md content defining the skill"},"sourceMeta":{"nullable":true,"description":"Source metadata (github/zip/manual)"},"contentHash":{"type":"string","nullable":true,"description":"SHA-256 content hash for change detection"},"scopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"],"description":"Ownership scope: base (project), space, system, user, app, cuppyclaw or routine"},"isEnabled":{"type":"boolean","description":"Whether the skill is enabled / available to the agent"},"createdTime":{"type":"string","description":"ISO 8601 creation timestamp"},"createdBy":{"type":"string","description":"User ID of the creator"}},"required":["id","slug","name","skillMd","scopeType","isEnabled","createdTime","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/skill/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"icon\":\"string\",\"isEnabled\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/skill/%7Bid%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"icon\":\"string\",\"isEnabled\":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/skill/%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({icon: 'string', isEnabled: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"icon\\\":\\\"string\\\",\\\"isEnabled\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/skill/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete skill","description":"Delete a skill by its ID.","tags":["skill"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Skill ID"},"required":true,"description":"Skill ID","name":"id","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/skill/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/skill/%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/skill/%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/skill/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/skill/{id}/download":{"get":{"summary":"Download skill as ZIP","description":"Download a skill bundle as a ZIP file.","tags":["skill"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Skill ID"},"required":true,"description":"Skill ID","name":"id","in":"path"},{"schema":{"type":"string","description":"Project context: authorizes a folded space skill via base|read on that project."},"required":false,"description":"Project context: authorizes a folded space skill via base|read on that project.","name":"baseId","in":"query"}],"responses":{"200":{"description":"ZIP file","content":{"application/zip":{"schema":{"nullable":true}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/skill/%7Bid%7D/download?baseId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/skill/%7Bid%7D/download?baseId=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/skill/%7Bid%7D/download?baseId=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/skill/%7Bid%7D/download?baseId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/skill/{id}/copy":{"post":{"summary":"Copy skill to another scope","description":"Copy a skill between user and project (base) scope. The source skill is kept; a same-slug skill in the target scope is overwritten.","tags":["skill"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Skill ID to copy"},"required":true,"description":"Skill ID to copy","name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"targetScopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"],"description":"Target ownership scope"},"targetScopeId":{"type":"string","description":"Target scope entity ID (required for base/space/app/cuppyclaw/routine)"},"sourceBaseId":{"type":"string","description":"Source project context: authorizes reading a folded space skill via base|read on that project."}},"required":["targetScopeType"]}}}},"responses":{"200":{"description":"Copied skill","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique skill identifier"},"slug":{"type":"string","description":"URL-safe skill slug"},"name":{"type":"string","description":"Display name of the skill"},"description":{"type":"string","nullable":true,"description":"Short description of what the skill does"},"icon":{"type":"string","nullable":true,"description":"Icon identifier or emoji"},"skillMd":{"type":"string","description":"SKILL.md content defining the skill"},"sourceMeta":{"nullable":true,"description":"Source metadata (github/zip/manual)"},"contentHash":{"type":"string","nullable":true,"description":"SHA-256 content hash for change detection"},"scopeType":{"type":"string","enum":["base","space","system","user","User","app","App","cuppyclaw","Cuppyclaw","routine","Routine"],"description":"Ownership scope: base (project), space, system, user, app, cuppyclaw or routine"},"isEnabled":{"type":"boolean","description":"Whether the skill is enabled / available to the agent"},"createdTime":{"type":"string","description":"ISO 8601 creation timestamp"},"createdBy":{"type":"string","description":"User ID of the creator"}},"required":["id","slug","name","skillMd","scopeType","isEnabled","createdTime","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/skill/%7Bid%7D/copy \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"targetScopeType\":\"base\",\"targetScopeId\":\"string\",\"sourceBaseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/skill/%7Bid%7D/copy';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"targetScopeType\":\"base\",\"targetScopeId\":\"string\",\"sourceBaseId\":\"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/skill/%7Bid%7D/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({targetScopeType: 'base', targetScopeId: 'string', sourceBaseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"targetScopeType\\\":\\\"base\\\",\\\"targetScopeId\\\":\\\"string\\\",\\\"sourceBaseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/skill/%7Bid%7D/copy\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/announcement":{"get":{"description":"Get the announcements currently in effect for the signed-in user\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["announcement"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"lang","in":"query"}],"responses":{"200":{"description":"Active announcements","content":{"application/json":{"schema":{"type":"object","properties":{"announcements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"form":{"type":"string","enum":["banner","toast","modal","sidebar-card"]},"level":{"type":"string","enum":["info","warning","critical","success"]},"title":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"message":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"options":{"type":"object","nullable":true,"properties":{"action":{"type":"object","properties":{"label":{"type":"object","properties":{"en":{"type":"string","maxLength":5000},"zh":{"type":"string","maxLength":5000},"it":{"type":"string","maxLength":5000},"fr":{"type":"string","maxLength":5000},"de":{"type":"string","maxLength":5000},"ja":{"type":"string","maxLength":5000},"ru":{"type":"string","maxLength":5000},"uk":{"type":"string","maxLength":5000},"tr":{"type":"string","maxLength":5000},"es":{"type":"string","maxLength":5000},"ar":{"type":"string","maxLength":5000},"he":{"type":"string","maxLength":5000}}},"url":{"type":"string","format":"uri"}},"required":["url"]}}},"startTime":{"type":"string"},"endTime":{"type":"string"}},"required":["id","form","level","title","message","options","startTime","endTime"]}},"nextPollAt":{"type":"string","nullable":true}},"required":["announcements","nextPollAt"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/announcement?lang=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/announcement?lang=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/announcement?lang=SOME_STRING_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/announcement?lang=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/artifact":{"post":{"description":"Create an artifact with its first version\n\nRequired token scopes: `base|read`","tags":["artifact"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["html","markdown"]},"name":{"type":"string","minLength":1,"maxLength":255},"content":{"type":"string","minLength":1}},"required":["type","name","content"]}}}},"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/artifact \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"html\",\"name\":\"string\",\"content\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/artifact';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"html\",\"name\":\"string\",\"content\":\"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/artifact',\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: 'html', name: 'string', content: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"html\\\",\\\"name\\\":\\\"string\\\",\\\"content\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/artifact\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/artifact/{artifactId}/versions":{"post":{"description":"Append a new immutable version to an artifact","tags":["artifact"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":255}},"required":["content"]}}}},"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/versions \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"content\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/versions';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"content\":\"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/artifact/%7BartifactId%7D/versions',\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({content: 'string', name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"content\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/artifact/%7BartifactId%7D/versions\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"List artifact versions (newest first)","tags":["artifact"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"}],"responses":{"200":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/versions \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/versions';\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/artifact/%7BartifactId%7D/versions',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/artifact/%7BartifactId%7D/versions\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/artifact/{artifactId}":{"get":{"description":"Get artifact metadata","tags":["artifact"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"}],"responses":{"200":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%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/artifact/%7BartifactId%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/artifact/%7BartifactId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Soft delete an artifact; render and shares stop resolving","tags":["artifact"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"}],"responses":{"200":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%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/artifact/%7BartifactId%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/artifact/%7BartifactId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/artifact":{"get":{"description":"List the current user artifacts (gallery)","tags":["artifact"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"baseId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"integer","nullable":true,"minimum":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":200},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/artifact?baseId=SOME_STRING_VALUE&search=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/artifact?baseId=SOME_STRING_VALUE&search=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/artifact?baseId=SOME_STRING_VALUE&search=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/artifact?baseId=SOME_STRING_VALUE&search=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\"))"}]}},"/artifact/{artifactId}/versions/{version}/restore":{"post":{"description":"Restore a historical version by copying it as the new head version","tags":["artifact"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"version","in":"path"}],"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/versions/%7Bversion%7D/restore \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/versions/%7Bversion%7D/restore';\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/artifact/%7BartifactId%7D/versions/%7Bversion%7D/restore',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/artifact/%7BartifactId%7D/versions/%7Bversion%7D/restore\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/artifact/{artifactId}/render-token":{"post":{"description":"Mint a short-lived render token for loading the artifact into a sandboxed iframe. Render auth never uses cookies.","tags":["artifact"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","minimum":0,"exclusiveMinimum":true}}}}}},"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/render-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"version\":0}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/render-token';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"version\":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/artifact/%7BartifactId%7D/render-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({version: 0}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"version\\\":0}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/artifact/%7BartifactId%7D/render-token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/artifact/{artifactId}/versions/{version}/render":{"get":{"description":"Render an artifact version as a sandboxed HTML document. Requires a render token minted via the render-token endpoint.","tags":["artifact"],"security":[],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"version","in":"path"},{"schema":{"type":"string"},"required":true,"name":"token","in":"query"}],"responses":{"200":{"description":"Wrapped HTML document"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/artifact/%7BartifactId%7D/versions/%7Bversion%7D/render?token=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/versions/%7Bversion%7D/render?token=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/artifact/%7BartifactId%7D/versions/%7Bversion%7D/render?token=SOME_STRING_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/artifact/%7BartifactId%7D/versions/%7Bversion%7D/render?token=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/artifact/{artifactId}/share":{"put":{"description":"Create or update the share config of an artifact (sharing is explicit, off by default)\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["artifact"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"type":"string","enum":["space","public"]},"password":{"type":"string","nullable":true,"minLength":1,"maxLength":128},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Succeed"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/share \\\n --header 'content-type: application/json' \\\n --data '{\"scope\":\"space\",\"password\":\"string\",\"expiresAt\":\"2019-08-24T14:15:22Z\",\"enabled\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/share';\nconst options = {\n method: 'PUT',\n headers: {'content-type': 'application/json'},\n body: '{\"scope\":\"space\",\"password\":\"string\",\"expiresAt\":\"2019-08-24T14:15:22Z\",\"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/artifact/%7BartifactId%7D/share',\n headers: {\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 scope: 'space',\n password: 'string',\n expiresAt: '2019-08-24T14:15:22Z',\n enabled: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"scope\\\":\\\"space\\\",\\\"password\\\":\\\"string\\\",\\\"expiresAt\\\":\\\"2019-08-24T14:15:22Z\\\",\\\"enabled\\\":true}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"PUT\", \"/api/artifact/%7BartifactId%7D/share\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get the share config of an artifact (owner only)\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["artifact"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"}],"responses":{"200":{"description":"Succeed"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/share"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/share';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/artifact/%7BartifactId%7D/share',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/artifact/%7BartifactId%7D/share\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Disable sharing; all links (including short links) stop resolving immediately\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["artifact"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"}],"responses":{"200":{"description":"Succeed"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/share"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/share';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/artifact/%7BartifactId%7D/share',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/artifact/%7BartifactId%7D/share\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/artifact/{artifactId}/share/rotate":{"post":{"description":"Rotate the shareId — previously issued links stop working immediately\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["artifact"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"artifactId","in":"path"}],"responses":{"201":{"description":"Succeed"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/share/rotate"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/share/rotate';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/artifact/%7BartifactId%7D/share/rotate',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/artifact/%7BartifactId%7D/share/rotate\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/artifact":{"get":{"description":"Get shared artifact meta; scope and password policy are enforced per request\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["artifact"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Succeed"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/artifact"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/artifact';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/artifact',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/artifact\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/artifact/auth":{"post":{"description":"Authenticate a password-protected artifact share; sets the share cookie\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["artifact"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":1}},"required":["password"]}}}},"responses":{"200":{"description":"Succeed"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/artifact/auth \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/artifact/auth';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\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/artifact/auth',\n headers: {\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 = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/artifact/auth\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/artifact/render-token":{"post":{"description":"Mint a share-scoped render token; share enabled/expiry are re-validated per mint\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["artifact"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","minimum":0,"exclusiveMinimum":true}}}}}},"responses":{"201":{"description":"Succeed"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/artifact/render-token \\\n --header 'content-type: application/json' \\\n --data '{\"version\":0}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/artifact/render-token';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"version\":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/share/%7BshareId%7D/artifact/render-token',\n headers: {\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({version: 0}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"version\\\":0}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/artifact/render-token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-onboarding/analyze":{"post":{"description":"Infer table structure and workflow/app recommendations from raw onboarding input\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user-onboarding"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"source":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"}},"required":["token","name"]},"maxItems":10},"prompt":{"type":"string","maxLength":2000},"schemaSummary":{"type":"string","maxLength":8000}}}},"required":["baseId","source"]}}}},"responses":{"200":{"description":"Inferred structure and recommendation cards (both may be empty on fallback)","content":{"application/json":{"schema":{"type":"object","properties":{"cards":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["workflow","app"]},"title":{"type":"string"},"description":{"type":"string"},"agentPrompt":{"type":"string"}},"required":["kind","title","description"]}},"degradedReason":{"type":"string"}},"required":["cards"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-onboarding/analyze \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\",\"source\":{\"attachments\":[{\"token\":\"string\",\"name\":\"string\"}],\"prompt\":\"string\",\"schemaSummary\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-onboarding/analyze';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"baseId\":\"string\",\"source\":{\"attachments\":[{\"token\":\"string\",\"name\":\"string\"}],\"prompt\":\"string\",\"schemaSummary\":\"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-onboarding/analyze',\n headers: {\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 baseId: 'string',\n source: {\n attachments: [{token: 'string', name: 'string'}],\n prompt: 'string',\n schemaSummary: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\",\\\"source\\\":{\\\"attachments\\\":[{\\\"token\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}],\\\"prompt\\\":\\\"string\\\",\\\"schemaSummary\\\":\\\"string\\\"}}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/user-onboarding/analyze\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-onboarding/analyze/stream":{"post":{"description":"Stream onboarding recommendation cards as they are generated\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user-onboarding"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"source":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"}},"required":["token","name"]},"maxItems":10},"prompt":{"type":"string","maxLength":2000},"schemaSummary":{"type":"string","maxLength":8000}}}},"required":["baseId","source"]}}}},"responses":{"200":{"description":"SSE stream of recommendation cards"}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-onboarding/analyze/stream \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\",\"source\":{\"attachments\":[{\"token\":\"string\",\"name\":\"string\"}],\"prompt\":\"string\",\"schemaSummary\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-onboarding/analyze/stream';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"baseId\":\"string\",\"source\":{\"attachments\":[{\"token\":\"string\",\"name\":\"string\"}],\"prompt\":\"string\",\"schemaSummary\":\"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-onboarding/analyze/stream',\n headers: {\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 baseId: 'string',\n source: {\n attachments: [{token: 'string', name: 'string'}],\n prompt: 'string',\n schemaSummary: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\",\\\"source\\\":{\\\"attachments\\\":[{\\\"token\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}],\\\"prompt\\\":\\\"string\\\",\\\"schemaSummary\\\":\\\"string\\\"}}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/user-onboarding/analyze/stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-onboarding/state":{"get":{"description":"Get (and lazily classify) the current user onboarding state\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user-onboarding"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"The onboarding state of the current user","content":{"application/json":{"schema":{"type":"object","properties":{"onboarding":{"type":"object","properties":{"status":{"type":"string","enum":["pending","in_progress","done","skipped","failed","ineligible","control"]},"step":{"type":"integer","minimum":1,"maximum":4},"baseId":{"type":"string"},"chatId":{"type":"string"},"version":{"type":"integer"},"startedTime":{"type":"string"},"analyzeCards":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["workflow","app"]},"title":{"type":"string"},"description":{"type":"string"},"agentPrompt":{"type":"string"}},"required":["kind","title","description"]}}},"required":["status"]},"profile":{"type":"object","properties":{"industry":{"type":"string","enum":["internet","software","ecommerce","manufacturing","construction","education","healthcare","finance","marketing","consulting","media","logistics","nonprofit","other"]},"role":{"type":"string","enum":["founder","operations","product","engineering","sales","marketing","hr","finance","project","other"]},"useCase":{"type":"string","enum":["crm","project","inventory","content","hr","finance","forms","other"]},"teamSize":{"type":"string","enum":["1","2-5","6-20","21-50","51-200","200+"]}}}},"required":["onboarding","profile"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/user-onboarding/state"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-onboarding/state';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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-onboarding/state',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/user-onboarding/state\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-onboarding/start":{"post":{"description":"Idempotently create the onboarding project and mark onboarding in progress\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user-onboarding"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"The project the onboarding flow operates on","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"}},"required":["baseId"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-onboarding/start"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-onboarding/start';\nconst options = {method: 'POST'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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-onboarding/start',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"POST\", \"/api/user-onboarding/start\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-onboarding/profile":{"patch":{"description":"Record the step-1 questionnaire answers of the current user\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user-onboarding"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"industry":{"type":"string","enum":["internet","software","ecommerce","manufacturing","construction","education","healthcare","finance","marketing","consulting","media","logistics","nonprofit","other"]},"role":{"type":"string","enum":["founder","operations","product","engineering","sales","marketing","hr","finance","project","other"]},"useCase":{"type":"string","enum":["crm","project","inventory","content","hr","finance","forms","other"]},"teamSize":{"type":"string","enum":["1","2-5","6-20","21-50","51-200","200+"]}}}}}},"responses":{"200":{"description":"The stored profile after the merge","content":{"application/json":{"schema":{"type":"object","properties":{"profile":{"type":"object","properties":{"industry":{"type":"string","enum":["internet","software","ecommerce","manufacturing","construction","education","healthcare","finance","marketing","consulting","media","logistics","nonprofit","other"]},"role":{"type":"string","enum":["founder","operations","product","engineering","sales","marketing","hr","finance","project","other"]},"useCase":{"type":"string","enum":["crm","project","inventory","content","hr","finance","forms","other"]},"teamSize":{"type":"string","enum":["1","2-5","6-20","21-50","51-200","200+"]}}}},"required":["profile"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user-onboarding/profile \\\n --header 'content-type: application/json' \\\n --data '{\"industry\":\"internet\",\"role\":\"founder\",\"useCase\":\"crm\",\"teamSize\":\"1\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-onboarding/profile';\nconst options = {\n method: 'PATCH',\n headers: {'content-type': 'application/json'},\n body: '{\"industry\":\"internet\",\"role\":\"founder\",\"useCase\":\"crm\",\"teamSize\":\"1\"}'\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-onboarding/profile',\n headers: {\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({industry: 'internet', role: 'founder', useCase: 'crm', teamSize: '1'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"industry\\\":\\\"internet\\\",\\\"role\\\":\\\"founder\\\",\\\"useCase\\\":\\\"crm\\\",\\\"teamSize\\\":\\\"1\\\"}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"PATCH\", \"/api/user-onboarding/profile\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-onboarding/progress":{"patch":{"description":"Advance the current user onboarding flow (step / terminal status / chat binding)\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user-onboarding"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["in_progress","done","skipped","failed"]},"step":{"type":"integer","minimum":1,"maximum":4},"chatId":{"type":"string"}}}}}},"responses":{"200":{"description":"The updated onboarding state","content":{"application/json":{"schema":{"type":"object","properties":{"onboarding":{"type":"object","properties":{"status":{"type":"string","enum":["pending","in_progress","done","skipped","failed","ineligible","control"]},"step":{"type":"integer","minimum":1,"maximum":4},"baseId":{"type":"string"},"chatId":{"type":"string"},"version":{"type":"integer"},"startedTime":{"type":"string"},"analyzeCards":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["workflow","app"]},"title":{"type":"string"},"description":{"type":"string"},"agentPrompt":{"type":"string"}},"required":["kind","title","description"]}}},"required":["status"]}},"required":["onboarding"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user-onboarding/progress \\\n --header 'content-type: application/json' \\\n --data '{\"status\":\"in_progress\",\"step\":1,\"chatId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-onboarding/progress';\nconst options = {\n method: 'PATCH',\n headers: {'content-type': 'application/json'},\n body: '{\"status\":\"in_progress\",\"step\":1,\"chatId\":\"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-onboarding/progress',\n headers: {\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({status: 'in_progress', step: 1, chatId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"status\\\":\\\"in_progress\\\",\\\"step\\\":1,\\\"chatId\\\":\\\"string\\\"}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"PATCH\", \"/api/user-onboarding/progress\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/sandbox/tool":{"get":{"summary":"List sandbox tools","description":"List persisted sandbox tools by scope. scopeId is required for cuppyclaw scope; omit for user scope.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["sandbox"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["user","cuppyclaw"]},"required":true,"name":"scopeType","in":"query"},{"schema":{"type":"string","description":"Required for cuppyclaw scope; omit for user scope"},"required":false,"description":"Required for cuppyclaw scope; omit for user scope","name":"scopeId","in":"query"}],"responses":{"200":{"description":"Sandbox tools","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"scopeType":{"type":"string","enum":["user","cuppyclaw"]},"scopeId":{"type":"string"},"name":{"type":"string"},"command":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"paths":{"type":"array","items":{"type":"string"}},"createdTime":{"type":"string"}},"required":["id","scopeType","scopeId","name","paths","createdTime"]}}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE';\nconst options = {method: 'GET'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"GET\", \"/api/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"summary":"Upsert sandbox tool","description":"Create or update a persisted sandbox tool by scope + name. Its paths are symlinked back whenever the sandbox is rebuilt; its setup command is replayed on demand by the in-sandbox CLI. Each path belongs to exactly one tool. Prefer $KEY references (via env variables) over embedding secrets in the command.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["sandbox"],"security":[{"cookieAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"scopeType":{"type":"string","enum":["user"]},"scopeId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9][\\w@./-]*$/i"},"command":{"type":"string","minLength":1,"maxLength":2000},"description":{"type":"string","minLength":1,"maxLength":200},"paths":{"type":"array","items":{"type":"string","minLength":1,"maxLength":255},"maxItems":10}},"required":["scopeType","name"]},{"type":"object","properties":{"scopeType":{"type":"string","enum":["cuppyclaw"]},"scopeId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9][\\w@./-]*$/i"},"command":{"type":"string","minLength":1,"maxLength":2000},"description":{"type":"string","minLength":1,"maxLength":200},"paths":{"type":"array","items":{"type":"string","minLength":1,"maxLength":255},"maxItems":10}},"required":["scopeType","scopeId","name"]}]}}}},"responses":{"201":{"description":"Created or updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"scopeType":{"type":"string","enum":["user","cuppyclaw"]},"scopeId":{"type":"string"},"name":{"type":"string"},"command":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"paths":{"type":"array","items":{"type":"string"}},"createdTime":{"type":"string"}},"required":["id","scopeType","scopeId","name","paths","createdTime"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/sandbox/tool \\\n --header 'content-type: application/json' \\\n --data '{\"scopeType\":\"user\",\"scopeId\":\"string\",\"name\":\"string\",\"command\":\"string\",\"description\":\"string\",\"paths\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox/tool';\nconst options = {\n method: 'POST',\n headers: {'content-type': 'application/json'},\n body: '{\"scopeType\":\"user\",\"scopeId\":\"string\",\"name\":\"string\",\"command\":\"string\",\"description\":\"string\",\"paths\":[\"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/sandbox/tool',\n headers: {\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 scopeType: 'user',\n scopeId: 'string',\n name: 'string',\n command: 'string',\n description: 'string',\n paths: ['string']\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"scopeType\\\":\\\"user\\\",\\\"scopeId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"command\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"paths\\\":[\\\"string\\\"]}\"\n\nheaders = { 'content-type': \"application/json\" }\n\nconn.request(\"POST\", \"/api/sandbox/tool\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete sandbox tool","description":"Forget this tool and delete the state it persisted from the volume, by scope + name. Returns the deleted record.\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["sandbox"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["user","cuppyclaw"]},"required":true,"name":"scopeType","in":"query"},{"schema":{"type":"string","description":"Required for cuppyclaw scope; omit for user scope"},"required":false,"description":"Required for cuppyclaw scope; omit for user scope","name":"scopeId","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9][\\w@./-]*$/i"},"required":true,"name":"name","in":"query"}],"responses":{"200":{"description":"The deleted record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"scopeType":{"type":"string","enum":["user","cuppyclaw"]},"scopeId":{"type":"string"},"name":{"type":"string"},"command":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"paths":{"type":"array","items":{"type":"string"}},"createdTime":{"type":"string"}},"required":["id","scopeType","scopeId","name","paths","createdTime"]}}}}},"x-excluded":true,"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&name=SOME_STRING_VALUE'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&name=SOME_STRING_VALUE';\nconst options = {method: 'DELETE'};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&name=SOME_STRING_VALUE',\n headers: {}\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nconn.request(\"DELETE\", \"/api/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&name=SOME_STRING_VALUE\")\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}}}}
\ No newline at end of file
]