From 3fb214c1ccae4837f0725c52941ead2f36a7a7e0 Mon Sep 17 00:00:00 2001 From: Boris Date: Mon, 14 Sep 2026 11:25:42 +0800 Subject: [PATCH] docs: refresh swagger.json with auth-mode annotations from app.teable.ai T7197 Regenerated from the production /docs-json. Every operation now declares how it authenticates: bearerAuth with the required token scopes in its description, cookieAuth plus x-excluded for session-only routes (Mintlify leaves those out of the API reference), or no security for public routes. Compared with the previous spec: 286 endpoints become visible (routine, composio integrations, chat archive, admin integrity, base personal order, and other routes added since March), 80 session-only endpoints that an access token could never call are excluded, and 11 registry entries that never matched a real route are replaced by their corrected method or path. Co-Authored-By: Claude Fable 5.1 --- swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swagger.json b/swagger.json index e792cf9d..d01e3a7c 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 base","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["spaceId"]}}}},"responses":{"201":{"description":"Returns information about a successfully created base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}":{"delete":{"description":"Delete a base by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a base by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns information about a base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a base info","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string"}}}}}},"responses":{"200":{"description":"Returns information about a successfully updated base.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true,"format":"emoji"}},"required":["spaceId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/order":{"put":{"description":"Update view order","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/order":{"put":{"description":"Update base order","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/access/all":{"get":{"description":"Get base list by query","tags":["base"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of base.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/access/all \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/access/all';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/access/all',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/access/all\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/collaborators":{"get":{"description":"List a base collaborator","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":false,"name":"role","in":"query"}],"responses":{"200":{"description":"Successful response, return base collaborator list.","content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"avatar":{"type":"string","nullable":true},"createdTime":{"type":"string"},"type":{"type":"string","enum":["user"]},"resourceType":{"type":"string","enum":["space","base"]},"isSystem":{"type":"boolean"},"billable":{"type":"boolean"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["userId","userName","email","role","avatar","createdTime","type","resourceType"]},{"type":"object","properties":{"departmentId":{"type":"string"},"departmentName":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"createdTime":{"type":"string"},"type":{"type":"string","enum":["department"]},"resourceType":{"type":"string","enum":["space","base"]},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["departmentId","departmentName","role","createdTime","type","resourceType"]}]}},"total":{"type":"number"}},"required":["collaborators","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/collaborators?includeSystem=SOME_BOOLEAN_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE&role=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a base collaborators","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"principalId","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":true,"name":"principalType","in":"query"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/collaborators?principalId=SOME_STRING_VALUE&principalType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a base collaborator","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["principalId","principalType","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/collaborators \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"principalId\":\"string\",\"principalType\":\"user\",\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborators',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({principalId: 'string', principalType: 'user', role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\",\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/collaborators\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/duplicate":{"post":{"description":"duplicate a base","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fromBaseId":{"type":"string","description":"The base to duplicate"},"spaceId":{"type":"string","description":"The space to duplicate the base to"},"withRecords":{"type":"boolean","description":"Whether to duplicate the records"},"name":{"type":"string","description":"The name of the duplicated base"},"baseId":{"type":"string"},"nodes":{"type":"array","items":{"type":"string"},"description":"The node IDs to include in the duplication"},"shareId":{"type":"string","description":"The share ID when duplicating from a shared base. If provided, will use share permissions instead of base|update permission."}},"required":["fromBaseId","spaceId"]}}}},"responses":{"201":{"description":"Returns information about a successfully duplicated base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fromBaseId\":\"string\",\"spaceId\":\"string\",\"withRecords\":true,\"name\":\"string\",\"baseId\":\"string\",\"nodes\":[\"string\"],\"shareId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fromBaseId\":\"string\",\"spaceId\":\"string\",\"withRecords\":true,\"name\":\"string\",\"baseId\":\"string\",\"nodes\":[\"string\"],\"shareId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n fromBaseId: 'string',\n spaceId: 'string',\n withRecords: true,\n name: 'string',\n baseId: 'string',\n nodes: ['string'],\n shareId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fromBaseId\\\":\\\"string\\\",\\\"spaceId\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"name\\\":\\\"string\\\",\\\"baseId\\\":\\\"string\\\",\\\"nodes\\\":[\\\"string\\\"],\\\"shareId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/create-from-template":{"post":{"summary":"Create a base from template or apply a template to a base","description":"Create a base from template or apply a template to a base","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The space id to create a base from"},"templateId":{"type":"string","description":"The template id to create a base from"},"withRecords":{"type":"boolean","description":"Whether to create records from the template"},"baseId":{"type":"string","description":"The base id to apply the template to"}},"required":["spaceId","templateId"]}}}},"responses":{"201":{"description":"Returns information about a successfully created base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"defaultUrl":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/create-from-template \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"templateId\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/create-from-template';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"templateId\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/create-from-template',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', templateId: 'string', withRecords: true, baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"templateId\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/create-from-template\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/permission":{"get":{"description":"Get a base permission","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about a base permission.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/permission \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/permission';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/permission',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/permission\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/invitation/link":{"get":{"description":"List a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response, return invitation information list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"invitationId":{"type":"string"},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","inviteUrl","invitationCode","createdBy","createdTime","role"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/invitation/link\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"201":{"description":"Successful response, return the ID of the invitation link.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","inviteUrl","invitationCode","createdBy","createdTime","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/invitation/link\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/invitation/link/{invitationId}":{"delete":{"description":"Delete a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a invitation link to your","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/invitation/email":{"post":{"description":"Send invitations by e-mail","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"},"minItems":1},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["emails","role"]}}}},"responses":{"201":{"description":"Successful response, return invitation information.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"invitationId":{"type":"string"}},"required":["invitationId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"emails\":[\"user@example.com\"],\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"emails\":[\"user@example.com\"],\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({emails: ['user@example.com'], role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"emails\\\":[\\\"user@example.com\\\"],\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/invitation/email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/shared-base":{"get":{"tags":["base"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns information about a shared base.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"},"spaceName":{"type":"string"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/shared-base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/shared-base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/shared-base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/shared-base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/permanent":{"delete":{"description":"Permanently delete a base by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/collaborator":{"post":{"description":"Add a collaborator to a space","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]}},"required":["principalId","principalType"]}},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":["collaborators","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/collaborator \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"owner\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/collaborator';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"owner\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/collaborator',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({collaborators: [{principalId: 'string', principalType: 'user'}], role: 'owner'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"collaborators\\\":[{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\"}],\\\"role\\\":\\\"owner\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/collaborator\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/collaborator":{"post":{"description":"Add a collaborator to a base","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"type":"object","properties":{"principalId":{"type":"string"},"principalType":{"type":"string","enum":["user","department"]}},"required":["principalId","principalType"]}},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["collaborators","role"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/collaborator \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborator';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"collaborators\":[{\"principalId\":\"string\",\"principalType\":\"user\"}],\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborator',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n collaborators: [{principalId: 'string', principalType: 'user'}],\n role: 'creator'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"collaborators\\\":[{\\\"principalId\\\":\\\"string\\\",\\\"principalType\\\":\\\"user\\\"}],\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/collaborator\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/collaborators/users":{"get":{"summary":"Get base collaborator user list","description":"Get base collaborator user list","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"string","enum":["desc","asc"]},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"Successful response, return base collaborator user list.","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard":{"get":{"description":"Get a list of dashboards in base","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboards.","content":{"application/json":{"schema":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a new dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Returns data about the created dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}":{"get":{"description":"Get a dashboard by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}},"pluginMap":{"type":"object","additionalProperties":{"type":"object","properties":{"id":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["id","pluginInstallId","name"]}}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a dashboard by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Dashboard deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/rename":{"patch":{"description":"Rename a dashboard by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Returns data about the renamed dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/layout":{"patch":{"description":"Update a dashboard layout by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["layout"]}}}},"responses":{"200":{"description":"Returns data about the updated dashboard layout.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["id","layout"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({layout: [{pluginInstallId: 'string', x: 0, y: 0, w: 0, h: 0}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"layout\\\":[{\\\"pluginInstallId\\\":\\\"string\\\",\\\"x\\\":0,\\\"y\\\":0,\\\"w\\\":0,\\\"h\\\":0}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/plugin":{"post":{"description":"Install a plugin to a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["name","pluginId"]}}}},"responses":{"201":{"description":"Returns data about the installed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"}},"required":["id","pluginId","pluginInstallId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}":{"delete":{"description":"Remove a plugin from a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin removed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a dashboard install plugin by id","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboard install plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin in a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Returns data about the renamed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"}},"required":["id","pluginInstallId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}/update-storage":{"patch":{"description":"Update storage of a plugin in a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Returns data about the updated plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"dashboardId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["baseId","dashboardId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D/update-storage\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/duplicate":{"post":{"description":"Duplicate a dashboard","summary":"Duplicate a dashboard","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated dashboard info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/plugin/{installedId}/duplicate":{"post":{"description":"Duplicate a dashboard installed plugin","summary":"Duplicate a dashboard installed plugin","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated dashboard info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin/%7BinstalledId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin":{"post":{"description":"Create a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":20},"description":{"type":"string","maxLength":150},"detailDesc":{"type":"string","maxLength":3000},"logo":{"type":"string"},"url":{"type":"string","format":"uri"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"helpUrl":{"type":"string","format":"uri"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]},"minItems":1},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"autoCreateMember":{"type":"boolean"}},"required":["name","logo","positions"]}}}},"responses":{"201":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"url":{"type":"string"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"secret":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"logo\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}},\"autoCreateMember\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"logo\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}},\"autoCreateMember\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n detailDesc: 'string',\n logo: 'string',\n url: 'http://example.com',\n config: {\n contextMenu: {width: 0, height: 0, x: 0, y: 0, frozenResize: true, frozenDrag: true},\n view: null,\n dashboard: null,\n panel: null\n },\n helpUrl: 'http://example.com',\n positions: ['dashboard'],\n i18n: {\n en: {title: 'Plugin title', description: 'Plugin description'},\n zh: {title: '插件标题', description: '插件描述'}\n },\n autoCreateMember: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"detailDesc\\\":\\\"string\\\",\\\"logo\\\":\\\"string\\\",\\\"url\\\":\\\"http://example.com\\\",\\\"config\\\":{\\\"contextMenu\\\":{\\\"width\\\":0,\\\"height\\\":0,\\\"x\\\":0,\\\"y\\\":0,\\\"frozenResize\\\":true,\\\"frozenDrag\\\":true},\\\"view\\\":null,\\\"dashboard\\\":null,\\\"panel\\\":null},\\\"helpUrl\\\":\\\"http://example.com\\\",\\\"positions\\\":[\\\"dashboard\\\"],\\\"i18n\\\":{\\\"en\\\":{\\\"title\\\":\\\"Plugin title\\\",\\\"description\\\":\\\"Plugin description\\\"},\\\"zh\\\":{\\\"title\\\":\\\"插件标题\\\",\\\"description\\\":\\\"插件描述\\\"}},\\\"autoCreateMember\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get plugins","tags":["plugin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns data about the plugins.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"url":{"type":"string"},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","i18n","status","createdTime","lastModifiedTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{id}":{"delete":{"description":"Delete a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns no content."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/plugin/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/plugin/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","maxLength":150},"detailDesc":{"type":"string","maxLength":3000},"url":{"type":"string","format":"uri"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"logo":{"type":"string"},"helpUrl":{"type":"string","format":"uri"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]},"minItems":1},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}}},"required":["name","positions"]}}}},"responses":{"200":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"url":{"type":"string"},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"secret":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime","lastModifiedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/plugin/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"logo\":\"string\",\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"detailDesc\":\"string\",\"url\":\"http://example.com\",\"config\":{\"contextMenu\":{\"width\":0,\"height\":0,\"x\":0,\"y\":0,\"frozenResize\":true,\"frozenDrag\":true},\"view\":null,\"dashboard\":null,\"panel\":null},\"logo\":\"string\",\"helpUrl\":\"http://example.com\",\"positions\":[\"dashboard\"],\"i18n\":{\"en\":{\"title\":\"Plugin title\",\"description\":\"Plugin description\"},\"zh\":{\"title\":\"插件标题\",\"description\":\"插件描述\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n detailDesc: 'string',\n url: 'http://example.com',\n config: {\n contextMenu: {width: 0, height: 0, x: 0, y: 0, frozenResize: true, frozenDrag: true},\n view: null,\n dashboard: null,\n panel: null\n },\n logo: 'string',\n helpUrl: 'http://example.com',\n positions: ['dashboard'],\n i18n: {\n en: {title: 'Plugin title', description: 'Plugin description'},\n zh: {title: '插件标题', description: '插件描述'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"detailDesc\\\":\\\"string\\\",\\\"url\\\":\\\"http://example.com\\\",\\\"config\\\":{\\\"contextMenu\\\":{\\\"width\\\":0,\\\"height\\\":0,\\\"x\\\":0,\\\"y\\\":0,\\\"frozenResize\\\":true,\\\"frozenDrag\\\":true},\\\"view\\\":null,\\\"dashboard\\\":null,\\\"panel\\\":null},\\\"logo\\\":\\\"string\\\",\\\"helpUrl\\\":\\\"http://example.com\\\",\\\"positions\\\":[\\\"dashboard\\\"],\\\"i18n\\\":{\\\"en\\\":{\\\"title\\\":\\\"Plugin title\\\",\\\"description\\\":\\\"Plugin description\\\"},\\\"zh\\\":{\\\"title\\\":\\\"插件标题\\\",\\\"description\\\":\\\"插件描述\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/plugin/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{id}/regenerate-secret":{"post":{"description":"Regenerate a plugin secret","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"201":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"}},"required":["id","secret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin/%7Bid%7D/regenerate-secret \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7Bid%7D/regenerate-secret';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7Bid%7D/regenerate-secret',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/plugin/%7Bid%7D/regenerate-secret\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}":{"get":{"description":"Get a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"url":{"type":"string"},"helpUrl":{"type":"string"},"positions":{"type":"array","items":{"type":"string","enum":["dashboard","view","contextMenu","panel"]}},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}},"secret":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"pluginUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","logo","positions","secret","status","createdTime","lastModifiedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/%7BpluginId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/center/list":{"get":{"description":"Get a list of plugins center","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"ids","in":"query"},{"schema":{"type":"string"},"required":false,"name":"positions","in":"query"}],"responses":{"200":{"description":"Returns data about the plugin center list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"detailDesc":{"type":"string"},"logo":{"type":"string"},"helpUrl":{"type":"string"},"i18n":{"type":"object","example":{"en":{"title":"Plugin title","description":"Plugin description"},"zh":{"title":"插件标题","description":"插件描述"}}},"url":{"type":"string"},"status":{"type":"string","enum":["developing","reviewing","published"]},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"required":["id","name","logo","status","createdTime","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/center/list?ids=SOME_ARRAY_VALUE&positions=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/submit":{"patch":{"description":"Submit a plugin","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin submitted successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/submit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/submit';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/submit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/plugin/%7BpluginId%7D/submit\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/token":{"get":{"description":"Get a token","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"secret":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"authCode":{"type":"string"}},"required":["baseId","secret","scopes","authCode"]}}}},"responses":{"200":{"description":"Returns token.","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expiresIn":{"type":"number"},"refreshExpiresIn":{"type":"number"}},"required":["accessToken","refreshToken","scopes","expiresIn","refreshExpiresIn"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\",\"secret\":\"string\",\"scopes\":[\"string\"],\"authCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/token';\nconst options = {\n method: 'GET',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"baseId\":\"string\",\"secret\":\"string\",\"scopes\":[\"string\"],\"authCode\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({baseId: 'string', secret: 'string', scopes: ['string'], authCode: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\",\\\"secret\\\":\\\"string\\\",\\\"scopes\\\":[\\\"string\\\"],\\\"authCode\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"GET\", \"/api/plugin/%7BpluginId%7D/token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/refreshToken":{"post":{"description":"Refresh a token","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"refreshToken":{"type":"string"},"secret":{"type":"string"}},"required":["refreshToken","secret"]}}}},"responses":{"201":{"description":"Returns token.","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expiresIn":{"type":"number"},"refreshExpiresIn":{"type":"number"}},"required":["accessToken","refreshToken","scopes","expiresIn","refreshExpiresIn"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/refreshToken \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"refreshToken\":\"string\",\"secret\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/refreshToken';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"refreshToken\":\"string\",\"secret\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/refreshToken',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({refreshToken: 'string', secret: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"refreshToken\\\":\\\"string\\\",\\\"secret\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/plugin/%7BpluginId%7D/refreshToken\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/authCode":{"post":{"description":"Get an auth code","tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"}},"required":["baseId"]}}}},"responses":{"201":{"description":"Returns auth code.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/authCode \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/authCode';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/authCode',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/plugin/%7BpluginId%7D/authCode\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/{pluginId}/unpublish":{"patch":{"tags":["plugin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin unpublished successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/plugin/%7BpluginId%7D/unpublish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/%7BpluginId%7D/unpublish';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/%7BpluginId%7D/unpublish',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/plugin/%7BpluginId%7D/unpublish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/chart/{pluginInstallId}/dashboard/{positionId}/query":{"get":{"description":"Get a dashboard install plugin query by id","tags":["plugin","chart","dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"positionId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"query"},{"schema":{"type":"string","enum":["json","text"]},"required":false,"name":"cellFormat","in":"query"}],"responses":{"200":{"description":"Returns data about the dashboard install plugin query.","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}}},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"column":{"type":"string"},"type":{"type":"string","enum":["aggregation","field"]},"fieldSource":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}},"required":["name","column","type"]}}},"required":["rows","columns"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/chart/%7BpluginInstallId%7D/dashboard/%7BpositionId%7D/query?baseId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/plugin/chart/{pluginInstallId}/plugin-panel/{positionId}/query":{"get":{"description":"Get a plugin panel install plugin query by id","tags":["plugin","chart","plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"positionId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"},{"schema":{"type":"string","enum":["json","text"]},"required":false,"name":"cellFormat","in":"query"}],"responses":{"200":{"description":"Returns data about the plugin panel install plugin query.","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}}},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"column":{"type":"string"},"type":{"type":"string","enum":["aggregation","field"]},"fieldSource":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}},"required":["name","column","type"]}}},"required":["rows","columns"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/plugin/chart/%7BpluginInstallId%7D/plugin-panel/%7BpositionId%7D/query?tableId=SOME_STRING_VALUE&cellFormat=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/export":{"get":{"description":"export a base by baseId","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","default":true},"required":false,"name":"includeData","in":"query"}],"responses":{"200":{"description":"export successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/export?includeData=SOME_BOOLEAN_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/create":{"post":{"description":"create a template","tags":["template"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"}}}}}},"responses":{"201":{"description":"Successfully create template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/template/create \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"category\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/create';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"category\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/create',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', category: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"category\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/template/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/notify/{token}":{"post":{"description":"Get Attachment information","tags":["attachments"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"},{"schema":{"type":"string"},"required":false,"name":"filename","in":"query"}],"responses":{"201":{"description":"Attachment information","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url 'https://app.teable.ai/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/attachments/notify/%7Btoken%7D?filename=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/{token}":{"get":{"description":"Upload attachment","tags":["attachments"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"},{"schema":{"type":"string","description":"File name for download"},"required":false,"description":"File name for download","name":"filename","in":"query"}],"responses":{"200":{"description":""}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/attachments/%7Btoken%7D?filename=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/signature":{"post":{"description":"Retrieve upload signature.","tags":["attachments"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"contentType":{"type":"string","example":"image/png","description":"Mime type"},"contentLength":{"type":"number","example":123,"description":"File size"},"expiresIn":{"type":"number","example":3600,"description":"Token expire time, seconds"},"hash":{"type":"string","example":"xxxxxxxx","description":"File hash"},"type":{"type":"integer","enum":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"example":1,"description":"Type"},"baseId":{"type":"string"}},"required":["contentType","contentLength","type"]}}}},"responses":{"201":{"description":"return the upload URL and the key.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","example":"https://example.com/attachment/upload","description":"Upload url"},"uploadMethod":{"type":"string","example":"POST","description":"Upload method"},"token":{"type":"string","example":"xxxxxxxx","description":"Secret key"},"requestHeaders":{"type":"object","additionalProperties":{"nullable":true},"example":{"Content-Type":"image/png"}}},"required":["url","uploadMethod","token","requestHeaders"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/attachments/signature \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"contentType\":\"image/png\",\"contentLength\":123,\"expiresIn\":3600,\"hash\":\"xxxxxxxx\",\"type\":1,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/signature';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"contentType\":\"image/png\",\"contentLength\":123,\"expiresIn\":3600,\"hash\":\"xxxxxxxx\",\"type\":1,\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/attachments/signature',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n contentType: 'image/png',\n contentLength: 123,\n expiresIn: 3600,\n hash: 'xxxxxxxx',\n type: 1,\n baseId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"contentType\\\":\\\"image/png\\\",\\\"contentLength\\\":123,\\\"expiresIn\\\":3600,\\\"hash\\\":\\\"xxxxxxxx\\\",\\\"type\\\":1,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/attachments/signature\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/attachments/upload/{token}":{"post":{"description":"Upload attachment","tags":["attachments"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"}],"requestBody":{"description":"upload attachment","required":true,"content":{"application/json":{"schema":{"type":"string","format":"binary"}}}},"responses":{"201":{"description":"Upload successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/attachments/upload/%7Btoken%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '\"string\"'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/attachments/upload/%7Btoken%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '\"string\"'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/attachments/upload/%7Btoken%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify('string'));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"\\\"string\\\"\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/attachments/upload/%7Btoken%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}":{"patch":{"description":"update a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"cover":{"type":"object","nullable":true,"properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]}},"required":["token","size","url","path","mimetype","name","id"]},"isPublished":{"type":"boolean"},"featured":{"type":"boolean"},"isSystem":{"type":"boolean"},"baseId":{"type":"string"},"markdownDescription":{"type":"string"}}}}}},"responses":{"201":{"description":"Successfully update template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"categoryId\":[\"string\"],\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"isPublished\":true,\"featured\":true,\"isSystem\":true,\"baseId\":\"string\",\"markdownDescription\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"categoryId\":[\"string\"],\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"isPublished\":true,\"featured\":true,\"isSystem\":true,\"baseId\":\"string\",\"markdownDescription\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n categoryId: ['string'],\n cover: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n name: 'string',\n id: 'string',\n thumbnailPath: {lg: 'string', sm: 'string'}\n },\n isPublished: true,\n featured: true,\n isSystem: true,\n baseId: 'string',\n markdownDescription: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"categoryId\\\":[\\\"string\\\"],\\\"cover\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"name\\\":\\\"string\\\",\\\"id\\\":\\\"string\\\",\\\"thumbnailPath\\\":{\\\"lg\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\"}},\\\"isPublished\\\":true,\\\"featured\\\":true,\\\"isSystem\\\":true,\\\"baseId\\\":\\\"string\\\",\\\"markdownDescription\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully delete template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/template/%7BtemplateId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"get template detail by templateId","summary":"get template detail by templateId","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"boolean","nullable":true},"required":false,"name":"featured","in":"query"},{"schema":{"type":"string"},"required":false,"name":"categoryId","in":"query"}],"responses":{"201":{"description":"Successfully get template detail.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"isSystem":{"type":"boolean"},"featured":{"type":"boolean"},"isPublished":{"type":"boolean"},"snapshot":{"type":"object","properties":{"baseId":{"type":"string"},"snapshotTime":{"type":"string","format":"date-time"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["baseId","snapshotTime","spaceId","name"]},"description":{"type":"string"},"baseId":{"type":"string"},"cover":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]},"presignedUrl":{"type":"string"}},"required":["token","size","url","path","mimetype","name","id","presignedUrl"]},"usageCount":{"type":"number"},"markdownDescription":{"type":"string"},"publishInfo":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true},"defaultUrl":{"type":"string"}}},"visitCount":{"type":"number"},"createdBy":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["id","snapshot","cover","usageCount","visitCount","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/%7BtemplateId%7D?featured=SOME_BOOLEAN_VALUE&categoryId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template":{"get":{"description":"get template list","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"number","nullable":true,"default":0,"example":0,"description":"The templates count you want to skip"},"required":false,"description":"The templates count you want to skip","name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"default":300,"example":300,"description":"The templates count you want to take"},"required":false,"description":"The templates count you want to take","name":"take","in":"query"}],"responses":{"201":{"description":"Successfully get template list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"isSystem":{"type":"boolean"},"featured":{"type":"boolean"},"isPublished":{"type":"boolean"},"snapshot":{"type":"object","properties":{"baseId":{"type":"string"},"snapshotTime":{"type":"string","format":"date-time"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["baseId","snapshotTime","spaceId","name"]},"description":{"type":"string"},"baseId":{"type":"string"},"cover":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]},"presignedUrl":{"type":"string"}},"required":["token","size","url","path","mimetype","name","id","presignedUrl"]},"usageCount":{"type":"number"},"markdownDescription":{"type":"string"},"publishInfo":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true},"defaultUrl":{"type":"string"}}},"visitCount":{"type":"number"},"createdBy":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["id","snapshot","cover","usageCount","visitCount","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/template?skip=0&take=300' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template?skip=0&take=300';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template?skip=0&take=300',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template?skip=0&take=300\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/published":{"get":{"description":"get published template list","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","default":true,"example":true,"description":"Whether to get featured templates"},"required":false,"description":"Whether to get featured templates","name":"featured","in":"query"},{"schema":{"type":"string","nullable":true,"example":"tc_123","description":"The template category id"},"required":false,"description":"The template category id","name":"categoryId","in":"query"},{"schema":{"type":"number","nullable":true,"default":0,"example":0,"description":"The templates count you want to skip"},"required":false,"description":"The templates count you want to skip","name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"default":100,"example":100,"description":"The templates count you want to take"},"required":false,"description":"The templates count you want to take","name":"take","in":"query"},{"schema":{"type":"string","example":"template","description":"The search keyword for template name"},"required":false,"description":"The search keyword for template name","name":"search","in":"query"}],"responses":{"201":{"description":"Successfully get published template list."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/published?featured=true&categoryId=tc_123&skip=0&take=100&search=template\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/snapshot":{"post":{"description":"create a template snapshot","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully create template snapshot."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D/snapshot \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/snapshot';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D/snapshot',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/template/%7BtemplateId%7D/snapshot\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/create":{"post":{"description":"create a template category","tags":["template"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Successfully create template category."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/template/category/create \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/create';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/create',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/template/category/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/list":{"get":{"description":"get template category list","tags":["template"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully get template category list."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/template/category/list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/category/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/{templateCategoryId}":{"delete":{"description":"delete a template category","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateCategoryId","in":"path"}],"responses":{"201":{"description":"Successfully delete template category."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/%7BtemplateCategoryId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/template/category/%7BtemplateCategoryId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"update a template category name","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateCategoryId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Successfully update template category name."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/%7BtemplateCategoryId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/template/category/%7BtemplateCategoryId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/category/{templateCategoryId}/order":{"put":{"description":"Update template category order","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateCategoryId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/category/%7BtemplateCategoryId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/category/%7BtemplateCategoryId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/template/category/%7BtemplateCategoryId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/pin-top":{"patch":{"description":"pin top a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully pin top a template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D/pin-top \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/pin-top';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D/pin-top',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D/pin-top\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/order":{"put":{"description":"Update template order","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/template/%7BtemplateId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/by-base/{baseId}":{"get":{"description":"get template by baseId","summary":"get template by baseId","tags":["template"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully get template.","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"array","items":{"type":"string"}},"isSystem":{"type":"boolean"},"featured":{"type":"boolean"},"isPublished":{"type":"boolean"},"snapshot":{"type":"object","properties":{"baseId":{"type":"string"},"snapshotTime":{"type":"string","format":"date-time"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["baseId","snapshotTime","spaceId","name"]},"description":{"type":"string"},"baseId":{"type":"string"},"cover":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]},"presignedUrl":{"type":"string"}},"required":["token","size","url","path","mimetype","name","id","presignedUrl"]},"usageCount":{"type":"number"},"markdownDescription":{"type":"string"},"publishInfo":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true},"defaultUrl":{"type":"string"}}},"visitCount":{"type":"number"},"createdBy":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"}},"required":["id"]}},"required":["id","snapshot","cover","usageCount","visitCount","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/template/by-base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/by-base/%7BbaseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/by-base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/by-base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/unpublish/{templateId}":{"delete":{"description":"unpublish a template","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"201":{"description":"Successfully unpublish template."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/template/unpublish/%7BtemplateId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/unpublish/%7BtemplateId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/unpublish/%7BtemplateId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/template/unpublish/%7BtemplateId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/{templateId}/visit":{"patch":{"description":"Increment template visit count","summary":"Increment template visit count","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"templateId","in":"path"}],"responses":{"200":{"description":"Successfully incremented template visit count."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/template/%7BtemplateId%7D/visit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/%7BtemplateId%7D/visit';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/%7BtemplateId%7D/visit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/template/%7BtemplateId%7D/visit\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/template/permalink/{identifier}":{"get":{"description":"Get template redirect URL for permalink","summary":"Get template permalink redirect URL","tags":["template"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"identifier","in":"path"}],"responses":{"200":{"description":"Successfully resolved template permalink.","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/template/permalink/%7Bidentifier%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/template/permalink/%7Bidentifier%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/template/permalink/%7Bidentifier%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/template/permalink/%7Bidentifier%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/publish":{"put":{"description":"publish or unpublish a base","summary":"publish or unpublish a base","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"cover":{"type":"object","nullable":true,"properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]}},"required":["token","size","url","path","mimetype","name","id"]},"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true}},"required":["title","description"]}}}},"responses":{"200":{"description":"publish base successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/publish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"title\":\"string\",\"description\":\"string\",\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"nodes\":[\"string\"],\"includeData\":true,\"defaultActiveNodeId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/publish';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"title\":\"string\",\"description\":\"string\",\"cover\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"name\":\"string\",\"id\":\"string\",\"thumbnailPath\":{\"lg\":\"string\",\"sm\":\"string\"}},\"nodes\":[\"string\"],\"includeData\":true,\"defaultActiveNodeId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/publish',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n title: 'string',\n description: 'string',\n cover: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n name: 'string',\n id: 'string',\n thumbnailPath: {lg: 'string', sm: 'string'}\n },\n nodes: ['string'],\n includeData: true,\n defaultActiveNodeId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"title\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"cover\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"name\\\":\\\"string\\\",\\\"id\\\":\\\"string\\\",\\\"thumbnailPath\\\":{\\\"lg\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\"}},\\\"nodes\\\":[\\\"string\\\"],\\\"includeData\\\":true,\\\"defaultActiveNodeId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/publish\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import":{"post":{"description":"import a base","summary":"import a base","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]},"spaceId":{"type":"string"}},"required":["notify","spaceId"]}}}},"responses":{"200":{"description":"import successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/import \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/import',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n notify: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n presignedUrl: 'string'\n },\n spaceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"},\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import-stream":{"post":{"description":"import a base with SSE progress stream","summary":"import a base with SSE progress events","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]},"spaceId":{"type":"string"}},"required":["notify","spaceId"]}}}},"responses":{"200":{"description":"SSE stream with progress events and final result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/import-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/import-stream',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n notify: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n presignedUrl: 'string'\n },\n spaceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"},\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/move":{"put":{"description":"move a base to another space","summary":"move a base to another space","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]}}}},"responses":{"200":{"description":"move to another space successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/move';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/erd":{"get":{"description":"Get the erd of a base","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the erd of a base.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"},"crossBaseId":{"type":"string"},"crossBaseName":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."}},"required":["id","name","type"]}}},"required":["id","name","fields"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["tableId","tableName","fieldId","fieldName"]},"target":{"type":"object","properties":{"tableId":{"type":"string"},"tableName":{"type":"string"},"fieldId":{"type":"string"},"fieldName":{"type":"string"}},"required":["tableId","tableName","fieldId","fieldName"]},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"]},"isOneWay":{"type":"boolean"},"type":{"anyOf":[{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},{"type":"string","enum":["lookup"]}]}},"required":["source","target","type"]}}},"required":["baseId","nodes","edges"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/erd \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/erd';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/erd',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/erd\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/base":{"get":{"description":"Get base list by query","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of base.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/permanent":{"delete":{"description":"Permanently delete a space by spaceId","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Permanently deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/mail-sender/test-transport-config":{"post":{"description":"Test mail transporter","tags":["mail"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"type":"string","format":"email"},"message":{"type":"string"},"transportConfig":{"type":"object","properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}},"required":["to","transportConfig"]}}}},"responses":{"200":{"description":"Test mail transporter successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/mail-sender/test-transport-config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"to\":\"user@example.com\",\"message\":\"string\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/mail-sender/test-transport-config';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"to\":\"user@example.com\",\"message\":\"string\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/mail-sender/test-transport-config',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n to: 'user@example.com',\n message: 'string',\n transportConfig: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"to\\\":\\\"user@example.com\\\",\\\"message\\\":\\\"string\\\",\\\"transportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/mail-sender/test-transport-config\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting":{"patch":{"description":"Get the instance settings","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"disallowSignUp":{"type":"boolean"},"disallowSpaceCreation":{"type":"boolean"},"disallowSpaceInvitation":{"type":"boolean"},"enableEmailVerification":{"type":"boolean"},"enableCreditReward":{"type":"boolean"},"aiConfig":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"enable":{"type":"boolean"}}},"enableWaitlist":{"type":"boolean"},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}},"brandName":{"type":"string"},"canaryConfig":{"type":"object","properties":{"enabled":{"type":"boolean"},"spaceIds":{"type":"array","items":{"type":"string"},"default":[]},"forceV2All":{"type":"boolean"}},"required":["enabled"]},"notifyMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]},"automationMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}}}}}},"responses":{"200":{"description":"Update settings successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/setting \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"disallowSignUp\":true,\"disallowSpaceCreation\":true,\"disallowSpaceInvitation\":true,\"enableEmailVerification\":true,\"enableCreditReward\":true,\"aiConfig\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"enable\":true},\"enableWaitlist\":true,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"},\"brandName\":\"string\",\"canaryConfig\":{\"enabled\":true,\"spaceIds\":[],\"forceV2All\":true},\"notifyMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}},\"automationMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"disallowSignUp\":true,\"disallowSpaceCreation\":true,\"disallowSpaceInvitation\":true,\"enableEmailVerification\":true,\"enableCreditReward\":true,\"aiConfig\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"enable\":true},\"enableWaitlist\":true,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"},\"brandName\":\"string\",\"canaryConfig\":{\"enabled\":true,\"spaceIds\":[],\"forceV2All\":true},\"notifyMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}},\"automationMailTransportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n disallowSignUp: true,\n disallowSpaceCreation: true,\n disallowSpaceInvitation: true,\n enableEmailVerification: true,\n enableCreditReward: true,\n aiConfig: {\n llmProviders: [],\n embeddingModel: 'string',\n translationModel: 'string',\n chatModel: {\n lg: 'string',\n md: 'string',\n sm: 'string',\n ability: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n }\n },\n gatewayModels: [\n {\n id: 'string',\n label: 'string',\n enabled: true,\n capabilities: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n },\n pricing: {\n input: 'string',\n output: 'string',\n inputCacheRead: 'string',\n inputCacheWrite: 'string',\n reasoning: 'string',\n image: 'string',\n webSearch: 'string'\n },\n rates: {\n inputRate: 0,\n outputRate: 0,\n cacheReadRate: 0,\n cacheWriteRate: 0,\n reasoningRate: 0,\n imageRate: 0,\n webSearchRate: 0\n },\n isImageModel: true,\n defaultFor: ['chatLg'],\n testedAt: 0,\n ownedBy: 'alibaba',\n modelType: 'language',\n tags: ['reasoning'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string'\n }\n ],\n capabilities: {disableActions: ['string']},\n aiGatewayApiKey: 'string',\n aiGatewayBaseUrl: 'http://example.com',\n attachmentTest: {\n urlMode: {success: true, errorMessage: 'string'},\n base64Mode: {success: true, errorMessage: 'string'},\n testedAt: 'string',\n testedOrigin: 'string',\n recommendedMode: 'url'\n },\n attachmentTransferMode: 'url',\n aiGatewayApiKeys: ['string'],\n vertexByokCredential: {\n project: 'string',\n location: 'string',\n googleCredentials: {privateKey: 'string', clientEmail: 'string'}\n },\n concurrencyGroups: [{id: 'string', name: 'string', taskTypes: [], keys: [], perKey: 5}],\n concurrencyPerKey: 1,\n enable: true\n },\n enableWaitlist: true,\n appConfig: {\n apiKey: 'string',\n vercelToken: 'string',\n customDomain: 'string',\n creditCount: 0,\n v0BaseUrl: 'http://example.com',\n vercelBaseUrl: 'http://example.com'\n },\n brandName: 'string',\n canaryConfig: {enabled: true, spaceIds: [], forceV2All: true},\n notifyMailTransportConfig: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n },\n automationMailTransportConfig: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"disallowSignUp\\\":true,\\\"disallowSpaceCreation\\\":true,\\\"disallowSpaceInvitation\\\":true,\\\"enableEmailVerification\\\":true,\\\"enableCreditReward\\\":true,\\\"aiConfig\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true}},\\\"gatewayModels\\\":[{\\\"id\\\":\\\"string\\\",\\\"label\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"capabilities\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\"},\\\"rates\\\":{\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0},\\\"isImageModel\\\":true,\\\"defaultFor\\\":[\\\"chatLg\\\"],\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"reasoning\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"]},\\\"aiGatewayApiKey\\\":\\\"string\\\",\\\"aiGatewayBaseUrl\\\":\\\"http://example.com\\\",\\\"attachmentTest\\\":{\\\"urlMode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"base64Mode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"testedAt\\\":\\\"string\\\",\\\"testedOrigin\\\":\\\"string\\\",\\\"recommendedMode\\\":\\\"url\\\"},\\\"attachmentTransferMode\\\":\\\"url\\\",\\\"aiGatewayApiKeys\\\":[\\\"string\\\"],\\\"vertexByokCredential\\\":{\\\"project\\\":\\\"string\\\",\\\"location\\\":\\\"string\\\",\\\"googleCredentials\\\":{\\\"privateKey\\\":\\\"string\\\",\\\"clientEmail\\\":\\\"string\\\"}},\\\"concurrencyGroups\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"taskTypes\\\":[],\\\"keys\\\":[],\\\"perKey\\\":5}],\\\"concurrencyPerKey\\\":1,\\\"enable\\\":true},\\\"enableWaitlist\\\":true,\\\"appConfig\\\":{\\\"apiKey\\\":\\\"string\\\",\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"creditCount\\\":0,\\\"v0BaseUrl\\\":\\\"http://example.com\\\",\\\"vercelBaseUrl\\\":\\\"http://example.com\\\"},\\\"brandName\\\":\\\"string\\\",\\\"canaryConfig\\\":{\\\"enabled\\\":true,\\\"spaceIds\\\":[],\\\"forceV2All\\\":true},\\\"notifyMailTransportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}},\\\"automationMailTransportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/setting\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get the instance settings","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the instance settings.","content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string"},"brandName":{"type":"string","nullable":true},"brandLogo":{"type":"string","nullable":true},"disallowSignUp":{"type":"boolean","nullable":true},"disallowSpaceCreation":{"type":"boolean","nullable":true},"disallowSpaceInvitation":{"type":"boolean","nullable":true},"disallowDashboard":{"type":"boolean","nullable":true},"enableEmailVerification":{"type":"boolean","nullable":true},"enableWaitlist":{"type":"boolean","nullable":true},"enableCreditReward":{"type":"boolean","nullable":true},"aiConfig":{"type":"object","nullable":true,"properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"enable":{"type":"boolean"}}},"notifyMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]},"automationMailTransportConfig":{"type":"object","nullable":true,"properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]},"appConfig":{"type":"object","nullable":true,"properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}},"canaryConfig":{"type":"object","nullable":true,"properties":{"enabled":{"type":"boolean"},"spaceIds":{"type":"array","items":{"type":"string"},"default":[]},"forceV2All":{"type":"boolean"}},"required":["enabled"]},"trashCleanupEnabledAt":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["instanceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/public":{"get":{"description":"Get the public instance settings","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the public instance settings.","content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string"},"brandName":{"type":"string","nullable":true},"brandLogo":{"type":"string","nullable":true},"disallowSignUp":{"type":"boolean","nullable":true},"disallowSpaceCreation":{"type":"boolean","nullable":true},"disallowSpaceInvitation":{"type":"boolean","nullable":true},"disallowDashboard":{"type":"boolean","nullable":true},"enableEmailVerification":{"type":"boolean","nullable":true},"enableWaitlist":{"type":"boolean","nullable":true},"createdTime":{"type":"string"},"aiConfig":{"type":"object","nullable":true,"properties":{"enable":{"type":"boolean"},"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"}},"required":["type","name"]}},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}}},"required":["enable","llmProviders"]},"appGenerationEnabled":{"type":"boolean"},"turnstileSiteKey":{"type":"string","nullable":true},"changeEmailSendCodeMailRate":{"type":"number"},"resetPasswordSendMailRate":{"type":"number"},"signupVerificationSendCodeMailRate":{"type":"number"},"enableCreditReward":{"type":"boolean"}},"required":["instanceId","aiConfig"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/public \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/public';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/public',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting/public\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/logo":{"patch":{"description":"Upload logo","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"Successfully upload logo.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/setting/logo \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form file=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/logo';\nconst form = new FormData();\nform.append('file', 'string');\n\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/logo',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/setting/logo\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/test-llm":{"post":{"description":"Test LLM provider configuration","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"modelKey":{"type":"string"},"ability":{"type":"array","items":{"type":"string","enum":["image","pdf","webSearch","toolCall","reasoning","imageGeneration"]}},"testImageGeneration":{"type":"boolean"},"testImageToImage":{"type":"boolean"}},"required":["type","name","apiKey","baseUrl"]}}}},"responses":{"200":{"description":"Test result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"response":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/setting/test-llm \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"modelKey\":\"string\",\"ability\":[\"image\"],\"testImageGeneration\":true,\"testImageToImage\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/test-llm';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"modelKey\":\"string\",\"ability\":[\"image\"],\"testImageGeneration\":true,\"testImageToImage\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/test-llm',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'openai',\n name: 'string',\n apiKey: 'string',\n baseUrl: 'http://example.com',\n models: '',\n modelKey: 'string',\n ability: ['image'],\n testImageGeneration: true,\n testImageToImage: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"openai\\\",\\\"name\\\":\\\"string\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"http://example.com\\\",\\\"models\\\":\\\"\\\",\\\"modelKey\\\":\\\"string\\\",\\\"ability\\\":[\\\"image\\\"],\\\"testImageGeneration\\\":true,\\\"testImageToImage\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/test-llm\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/batch-test-llm":{"post":{"description":"Batch test all configured LLM models to verify compatibility with AI field features","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"}},"required":["type","name","apiKey","baseUrl","isInstance"]}}}}}}},"responses":{"200":{"description":"Batch test results","content":{"application/json":{"schema":{"type":"object","properties":{"totalModels":{"type":"number"},"testedModels":{"type":"number"},"successCount":{"type":"number"},"failedCount":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"modelKey":{"type":"string"},"providerName":{"type":"string"},"providerType":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"model":{"type":"string"},"success":{"type":"boolean"},"error":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}},"required":["modelKey","providerName","providerType","model","success"]}}},"required":["totalModels","testedModels","successCount","failedCount","results"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/setting/batch-test-llm \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"providers\":[{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"isInstance\":true}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/batch-test-llm';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"providers\":[{\"type\":\"openai\",\"name\":\"string\",\"apiKey\":\"string\",\"baseUrl\":\"http://example.com\",\"models\":\"\",\"isInstance\":true}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/batch-test-llm',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n providers: [\n {\n type: 'openai',\n name: 'string',\n apiKey: 'string',\n baseUrl: 'http://example.com',\n models: '',\n isInstance: true\n }\n ]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"providers\\\":[{\\\"type\\\":\\\"openai\\\",\\\"name\\\":\\\"string\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"http://example.com\\\",\\\"models\\\":\\\"\\\",\\\"isInstance\\\":true}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/batch-test-llm\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/test-api-key":{"post":{"description":"Test API key validity for AI Gateway or v0, optionally test attachment transfer modes","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["aiGateway","v0","vercel"]},"apiKey":{"type":"string"},"baseUrl":{"type":"string"},"testAttachment":{"type":"boolean"}},"required":["type","apiKey"]}}}},"responses":{"200":{"description":"Test result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","need_credit_card","insufficient_quota","network_error","unknown"]},"message":{"type":"string"}},"required":["code"]},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"recommendedMode":{"type":"string","enum":["url","base64"]},"testedOrigin":{"type":"string"}}}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/setting/test-api-key \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"aiGateway\",\"apiKey\":\"string\",\"baseUrl\":\"string\",\"testAttachment\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/test-api-key';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"aiGateway\",\"apiKey\":\"string\",\"baseUrl\":\"string\",\"testAttachment\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/test-api-key',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({type: 'aiGateway', apiKey: 'string', baseUrl: 'string', testAttachment: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"aiGateway\\\",\\\"apiKey\\\":\\\"string\\\",\\\"baseUrl\\\":\\\"string\\\",\\\"testAttachment\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/setting/test-api-key\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/test-public-access":{"get":{"description":"Test if this Teable instance is publicly accessible from the internet","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Public access test result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"publicOrigin":{"type":"string"},"error":{"type":"string"},"storageCheck":{"type":"object","properties":{"success":{"type":"boolean"},"storageUrl":{"type":"string"},"error":{"type":"string"}},"required":["success"]}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/test-public-access \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/test-public-access';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/test-public-access',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting/test-public-access\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/set-mail-transport-config":{"put":{"description":"Set mail transporter","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["notifyMailTransportConfig"]},{"type":"string","enum":["automationMailTransportConfig"]}]},"transportConfig":{"type":"object","properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}},"required":["name","transportConfig"]}}}},"responses":{"200":{"description":"Set mail transporter successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["notifyMailTransportConfig"]},{"type":"string","enum":["automationMailTransportConfig"]}]},"transportConfig":{"type":"object","properties":{"senderName":{"type":"string"},"sender":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"secure":{"type":"boolean"},"auth":{"type":"object","properties":{"user":{"type":"string"},"pass":{"type":"string"}},"required":["user","pass"]}},"required":["sender","host","port","auth"]}},"required":["name","transportConfig"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/admin/setting/set-mail-transport-config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"notifyMailTransportConfig\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/set-mail-transport-config';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"notifyMailTransportConfig\",\"transportConfig\":{\"senderName\":\"string\",\"sender\":\"string\",\"host\":\"string\",\"port\":0,\"secure\":true,\"auth\":{\"user\":\"string\",\"pass\":\"string\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/set-mail-transport-config',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'notifyMailTransportConfig',\n transportConfig: {\n senderName: 'string',\n sender: 'string',\n host: 'string',\n port: 0,\n secure: true,\n auth: {user: 'string', pass: 'string'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"notifyMailTransportConfig\\\",\\\"transportConfig\\\":{\\\"senderName\\\":\\\"string\\\",\\\"sender\\\":\\\"string\\\",\\\"host\\\":\\\"string\\\",\\\"port\\\":0,\\\"secure\\\":true,\\\"auth\\\":{\\\"user\\\":\\\"string\\\",\\\"pass\\\":\\\"string\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/admin/setting/set-mail-transport-config\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/setting/ai-key-stats":{"get":{"description":"Get per-key usage statistics for AI Gateway API keys","tags":["admin","setting"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Key statistics by group","content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"object","additionalProperties":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"fingerprint":{"type":"string"},"totalRequests":{"type":"number"},"totalFailures":{"type":"number"},"activeRequests":{"type":"number"},"lastUsedAt":{"type":"number","nullable":true},"isActive":{"type":"boolean"},"lastError":{"type":"string","nullable":true}},"required":["index","fingerprint","totalRequests","totalFailures","activeRequests","lastUsedAt","isActive","lastError"]}},"totalSlots":{"type":"number"},"activeSlots":{"type":"number"},"waitingCount":{"type":"number"}},"required":["keys","totalSlots","activeSlots","waitingCount"]}}},"required":["groups"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/setting/ai-key-stats \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/setting/ai-key-stats';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/setting/ai-key-stats',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/setting/ai-key-stats\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/plugin/{pluginId}/publish":{"patch":{"description":"Publish a plugin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin published successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/publish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/publish';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/plugin/%7BpluginId%7D/publish',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/plugin/%7BpluginId%7D/publish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/plugin/{pluginId}/unpublish":{"patch":{"description":"Admin unpublish a plugin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Plugin unpublished successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/unpublish \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/plugin/%7BpluginId%7D/unpublish';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/plugin/%7BpluginId%7D/unpublish',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/plugin/%7BpluginId%7D/unpublish\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license/status":{"get":{"description":"Get enterprise license expiration status","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns enterprise license expiration status.","content":{"application/json":{"schema":{"type":"object","properties":{"expiredTime":{"type":"string","nullable":true}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/enterprise-license/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/status';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/enterprise-license/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/enterprise-license/status\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/integration":{"get":{"description":"Get integration list by query","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of integration.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"type":{"type":"string","enum":["AI"]},"enable":{"type":"boolean"},"config":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}}}},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","spaceId","type","config","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/integration \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/integration',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/integration\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a integration to a space","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["AI"]},"enable":{"type":"boolean"},"config":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}}}}},"required":["type","config"]}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/integration \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"AI\",\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"AI\",\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/integration',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'AI',\n enable: true,\n config: {\n llmProviders: [],\n embeddingModel: 'string',\n translationModel: 'string',\n chatModel: {\n lg: 'string',\n md: 'string',\n sm: 'string',\n ability: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n }\n },\n gatewayModels: [\n {\n id: 'string',\n label: 'string',\n enabled: true,\n capabilities: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n },\n pricing: {\n input: 'string',\n output: 'string',\n inputCacheRead: 'string',\n inputCacheWrite: 'string',\n reasoning: 'string',\n image: 'string',\n webSearch: 'string'\n },\n rates: {\n inputRate: 0,\n outputRate: 0,\n cacheReadRate: 0,\n cacheWriteRate: 0,\n reasoningRate: 0,\n imageRate: 0,\n webSearchRate: 0\n },\n isImageModel: true,\n defaultFor: ['chatLg'],\n testedAt: 0,\n ownedBy: 'alibaba',\n modelType: 'language',\n tags: ['reasoning'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string'\n }\n ],\n capabilities: {disableActions: ['string']},\n aiGatewayApiKey: 'string',\n aiGatewayBaseUrl: 'http://example.com',\n attachmentTest: {\n urlMode: {success: true, errorMessage: 'string'},\n base64Mode: {success: true, errorMessage: 'string'},\n testedAt: 'string',\n testedOrigin: 'string',\n recommendedMode: 'url'\n },\n attachmentTransferMode: 'url',\n aiGatewayApiKeys: ['string'],\n vertexByokCredential: {\n project: 'string',\n location: 'string',\n googleCredentials: {privateKey: 'string', clientEmail: 'string'}\n },\n concurrencyGroups: [{id: 'string', name: 'string', taskTypes: [], keys: [], perKey: 5}],\n concurrencyPerKey: 1,\n appConfig: {\n apiKey: 'string',\n vercelToken: 'string',\n customDomain: 'string',\n creditCount: 0,\n v0BaseUrl: 'http://example.com',\n vercelBaseUrl: 'http://example.com'\n }\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"AI\\\",\\\"enable\\\":true,\\\"config\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true}},\\\"gatewayModels\\\":[{\\\"id\\\":\\\"string\\\",\\\"label\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"capabilities\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\"},\\\"rates\\\":{\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0},\\\"isImageModel\\\":true,\\\"defaultFor\\\":[\\\"chatLg\\\"],\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"reasoning\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"]},\\\"aiGatewayApiKey\\\":\\\"string\\\",\\\"aiGatewayBaseUrl\\\":\\\"http://example.com\\\",\\\"attachmentTest\\\":{\\\"urlMode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"base64Mode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"testedAt\\\":\\\"string\\\",\\\"testedOrigin\\\":\\\"string\\\",\\\"recommendedMode\\\":\\\"url\\\"},\\\"attachmentTransferMode\\\":\\\"url\\\",\\\"aiGatewayApiKeys\\\":[\\\"string\\\"],\\\"vertexByokCredential\\\":{\\\"project\\\":\\\"string\\\",\\\"location\\\":\\\"string\\\",\\\"googleCredentials\\\":{\\\"privateKey\\\":\\\"string\\\",\\\"clientEmail\\\":\\\"string\\\"}},\\\"concurrencyGroups\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"taskTypes\\\":[],\\\"keys\\\":[],\\\"perKey\\\":5}],\\\"concurrencyPerKey\\\":1,\\\"appConfig\\\":{\\\"apiKey\\\":\\\"string\\\",\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"creditCount\\\":0,\\\"v0BaseUrl\\\":\\\"http://example.com\\\",\\\"vercelBaseUrl\\\":\\\"http://example.com\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/integration\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/integration/{integrationId}":{"patch":{"description":"Update a integration to a space","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enable":{"type":"boolean"},"config":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}}}},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"appConfig":{"type":"object","properties":{"apiKey":{"type":"string"},"vercelToken":{"type":"string"},"customDomain":{"type":"string"},"creditCount":{"type":"number","minimum":0},"v0BaseUrl":{"type":"string","format":"uri"},"vercelBaseUrl":{"type":"string","format":"uri"}}}}}}}}}},"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"enable\":true,\"config\":{\"llmProviders\":[],\"embeddingModel\":\"string\",\"translationModel\":\"string\",\"chatModel\":{\"lg\":\"string\",\"md\":\"string\",\"sm\":\"string\",\"ability\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true}},\"gatewayModels\":[{\"id\":\"string\",\"label\":\"string\",\"enabled\":true,\"capabilities\":{\"image\":true,\"pdf\":true,\"webSearch\":true,\"toolCall\":true,\"reasoning\":true,\"imageGeneration\":true},\"pricing\":{\"input\":\"string\",\"output\":\"string\",\"inputCacheRead\":\"string\",\"inputCacheWrite\":\"string\",\"reasoning\":\"string\",\"image\":\"string\",\"webSearch\":\"string\"},\"rates\":{\"inputRate\":0,\"outputRate\":0,\"cacheReadRate\":0,\"cacheWriteRate\":0,\"reasoningRate\":0,\"imageRate\":0,\"webSearchRate\":0},\"isImageModel\":true,\"defaultFor\":[\"chatLg\"],\"testedAt\":0,\"ownedBy\":\"alibaba\",\"modelType\":\"language\",\"tags\":[\"reasoning\"],\"contextWindow\":0,\"maxTokens\":0,\"description\":\"string\"}],\"capabilities\":{\"disableActions\":[\"string\"]},\"aiGatewayApiKey\":\"string\",\"aiGatewayBaseUrl\":\"http://example.com\",\"attachmentTest\":{\"urlMode\":{\"success\":true,\"errorMessage\":\"string\"},\"base64Mode\":{\"success\":true,\"errorMessage\":\"string\"},\"testedAt\":\"string\",\"testedOrigin\":\"string\",\"recommendedMode\":\"url\"},\"attachmentTransferMode\":\"url\",\"aiGatewayApiKeys\":[\"string\"],\"vertexByokCredential\":{\"project\":\"string\",\"location\":\"string\",\"googleCredentials\":{\"privateKey\":\"string\",\"clientEmail\":\"string\"}},\"concurrencyGroups\":[{\"id\":\"string\",\"name\":\"string\",\"taskTypes\":[],\"keys\":[],\"perKey\":5}],\"concurrencyPerKey\":1,\"appConfig\":{\"apiKey\":\"string\",\"vercelToken\":\"string\",\"customDomain\":\"string\",\"creditCount\":0,\"v0BaseUrl\":\"http://example.com\",\"vercelBaseUrl\":\"http://example.com\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n enable: true,\n config: {\n llmProviders: [],\n embeddingModel: 'string',\n translationModel: 'string',\n chatModel: {\n lg: 'string',\n md: 'string',\n sm: 'string',\n ability: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n }\n },\n gatewayModels: [\n {\n id: 'string',\n label: 'string',\n enabled: true,\n capabilities: {\n image: true,\n pdf: true,\n webSearch: true,\n toolCall: true,\n reasoning: true,\n imageGeneration: true\n },\n pricing: {\n input: 'string',\n output: 'string',\n inputCacheRead: 'string',\n inputCacheWrite: 'string',\n reasoning: 'string',\n image: 'string',\n webSearch: 'string'\n },\n rates: {\n inputRate: 0,\n outputRate: 0,\n cacheReadRate: 0,\n cacheWriteRate: 0,\n reasoningRate: 0,\n imageRate: 0,\n webSearchRate: 0\n },\n isImageModel: true,\n defaultFor: ['chatLg'],\n testedAt: 0,\n ownedBy: 'alibaba',\n modelType: 'language',\n tags: ['reasoning'],\n contextWindow: 0,\n maxTokens: 0,\n description: 'string'\n }\n ],\n capabilities: {disableActions: ['string']},\n aiGatewayApiKey: 'string',\n aiGatewayBaseUrl: 'http://example.com',\n attachmentTest: {\n urlMode: {success: true, errorMessage: 'string'},\n base64Mode: {success: true, errorMessage: 'string'},\n testedAt: 'string',\n testedOrigin: 'string',\n recommendedMode: 'url'\n },\n attachmentTransferMode: 'url',\n aiGatewayApiKeys: ['string'],\n vertexByokCredential: {\n project: 'string',\n location: 'string',\n googleCredentials: {privateKey: 'string', clientEmail: 'string'}\n },\n concurrencyGroups: [{id: 'string', name: 'string', taskTypes: [], keys: [], perKey: 5}],\n concurrencyPerKey: 1,\n appConfig: {\n apiKey: 'string',\n vercelToken: 'string',\n customDomain: 'string',\n creditCount: 0,\n v0BaseUrl: 'http://example.com',\n vercelBaseUrl: 'http://example.com'\n }\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"enable\\\":true,\\\"config\\\":{\\\"llmProviders\\\":[],\\\"embeddingModel\\\":\\\"string\\\",\\\"translationModel\\\":\\\"string\\\",\\\"chatModel\\\":{\\\"lg\\\":\\\"string\\\",\\\"md\\\":\\\"string\\\",\\\"sm\\\":\\\"string\\\",\\\"ability\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true}},\\\"gatewayModels\\\":[{\\\"id\\\":\\\"string\\\",\\\"label\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"capabilities\\\":{\\\"image\\\":true,\\\"pdf\\\":true,\\\"webSearch\\\":true,\\\"toolCall\\\":true,\\\"reasoning\\\":true,\\\"imageGeneration\\\":true},\\\"pricing\\\":{\\\"input\\\":\\\"string\\\",\\\"output\\\":\\\"string\\\",\\\"inputCacheRead\\\":\\\"string\\\",\\\"inputCacheWrite\\\":\\\"string\\\",\\\"reasoning\\\":\\\"string\\\",\\\"image\\\":\\\"string\\\",\\\"webSearch\\\":\\\"string\\\"},\\\"rates\\\":{\\\"inputRate\\\":0,\\\"outputRate\\\":0,\\\"cacheReadRate\\\":0,\\\"cacheWriteRate\\\":0,\\\"reasoningRate\\\":0,\\\"imageRate\\\":0,\\\"webSearchRate\\\":0},\\\"isImageModel\\\":true,\\\"defaultFor\\\":[\\\"chatLg\\\"],\\\"testedAt\\\":0,\\\"ownedBy\\\":\\\"alibaba\\\",\\\"modelType\\\":\\\"language\\\",\\\"tags\\\":[\\\"reasoning\\\"],\\\"contextWindow\\\":0,\\\"maxTokens\\\":0,\\\"description\\\":\\\"string\\\"}],\\\"capabilities\\\":{\\\"disableActions\\\":[\\\"string\\\"]},\\\"aiGatewayApiKey\\\":\\\"string\\\",\\\"aiGatewayBaseUrl\\\":\\\"http://example.com\\\",\\\"attachmentTest\\\":{\\\"urlMode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"base64Mode\\\":{\\\"success\\\":true,\\\"errorMessage\\\":\\\"string\\\"},\\\"testedAt\\\":\\\"string\\\",\\\"testedOrigin\\\":\\\"string\\\",\\\"recommendedMode\\\":\\\"url\\\"},\\\"attachmentTransferMode\\\":\\\"url\\\",\\\"aiGatewayApiKeys\\\":[\\\"string\\\"],\\\"vertexByokCredential\\\":{\\\"project\\\":\\\"string\\\",\\\"location\\\":\\\"string\\\",\\\"googleCredentials\\\":{\\\"privateKey\\\":\\\"string\\\",\\\"clientEmail\\\":\\\"string\\\"}},\\\"concurrencyGroups\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"taskTypes\\\":[],\\\"keys\\\":[],\\\"perKey\\\":5}],\\\"concurrencyPerKey\\\":1,\\\"appConfig\\\":{\\\"apiKey\\\":\\\"string\\\",\\\"vercelToken\\\":\\\"string\\\",\\\"customDomain\\\":\\\"string\\\",\\\"creditCount\\\":0,\\\"v0BaseUrl\\\":\\\"http://example.com\\\",\\\"vercelBaseUrl\\\":\\\"http://example.com\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a integration by integrationId","tags":["space","integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/integration/%7BintegrationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/search":{"get":{"description":"Search bases and nodes within a space","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","enum":["space","base","table","view","field","record","workflow","app","dashboard","folder"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"string","minLength":1},"required":true,"name":"search","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Returns the search results.","content":{"application/json":{"schema":{"type":"object","properties":{"list":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["space","base","table","view","field","record","workflow","app","dashboard","folder"]},"icon":{"type":"string","nullable":true},"baseId":{"type":"string"},"baseName":{"type":"string"},"createdTime":{"type":"string"},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","avatar"]}},"required":["id","name","type","icon","baseId","baseName","createdTime"]}},"total":{"type":"number"},"nextCursor":{"type":"string","nullable":true}},"required":["list","total","nextCursor"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/search?type=SOME_STRING_VALUE&search=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash":{"get":{"description":"Get trash list for spaces or bases","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"spaceId","in":"query"},{"schema":{"type":"string","enum":["space","base"]},"required":true,"name":"resourceType","in":"query"}],"responses":{"200":{"description":"Get trash successfully","content":{"application/json":{"schema":{"type":"object","properties":{"trashItems":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string","enum":["space","base","table","app","workflow"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceId","resourceType","deletedTime","deletedBy"]},{"type":"object","properties":{"id":{"type":"string"},"resourceIds":{"type":"array","items":{"type":"string"}},"resourceType":{"type":"string","enum":["view","field","record"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceIds","resourceType","deletedTime","deletedBy"]}]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"resourceMap":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["id","spaceId","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]}},"required":["id","name","type"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"isLookup":{"type":"boolean","nullable":true},"isConditionalLookup":{"type":"boolean","nullable":true},"options":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["id","name","type","isLookup"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}]}},"nextCursor":{"type":"string","nullable":true}},"required":["trashItems","userMap","resourceMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/trash?spaceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/items":{"get":{"description":"Get trash items for base or table","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"query"},{"schema":{"type":"string","enum":["base","table"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Get trash successfully","content":{"application/json":{"schema":{"type":"object","properties":{"trashItems":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"resourceId":{"type":"string"},"resourceType":{"type":"string","enum":["space","base","table","app","workflow"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceId","resourceType","deletedTime","deletedBy"]},{"type":"object","properties":{"id":{"type":"string"},"resourceIds":{"type":"array","items":{"type":"string"}},"resourceType":{"type":"string","enum":["view","field","record"]},"deletedTime":{"type":"string"},"deletedBy":{"type":"string"}},"required":["id","resourceIds","resourceType","deletedTime","deletedBy"]}]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"resourceMap":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"name":{"type":"string"}},"required":["id","spaceId","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]}},"required":["id","name","type"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"isLookup":{"type":"boolean","nullable":true},"isConditionalLookup":{"type":"boolean","nullable":true},"options":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["id","name","type","isLookup"]},{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}]}},"nextCursor":{"type":"string","nullable":true}},"required":["trashItems","userMap","resourceMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/trash/items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/reset-items":{"delete":{"description":"Reset trash items for a base or table","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"query"},{"schema":{"type":"string","enum":["base","table"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Reset successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/trash/reset-items?resourceId=SOME_STRING_VALUE&resourceType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/trash/restore/{trashId}":{"post":{"description":"restore a space, base, table, etc.","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"trashId","in":"path"}],"responses":{"201":{"description":"Restored successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/trash/restore/%7BtrashId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/trash/restore/%7BtrashId%7D';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/trash/restore/%7BtrashId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/trash/restore/%7BtrashId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/history":{"get":{"summary":"Get record history","description":"Retrieve the change history of a specific record, including field modifications and user information.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Get the history list for a record","content":{"application/json":{"schema":{"type":"object","properties":{"historyList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tableId":{"type":"string"},"recordId":{"type":"string"},"fieldId":{"type":"string"},"before":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"after":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"createdTime":{"type":"string"},"createdBy":{"type":"string"}},"required":["id","tableId","recordId","fieldId","before","after","createdTime","createdBy"]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"nextCursor":{"type":"string","nullable":true}},"required":["historyList","userMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/history \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/history';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/history',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/history\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/history":{"get":{"summary":"Get table records history","description":"Retrieve the change history of all records in a table, including field modifications and user information.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Get the history list of all records in a table","content":{"application/json":{"schema":{"type":"object","properties":{"historyList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tableId":{"type":"string"},"recordId":{"type":"string"},"fieldId":{"type":"string"},"before":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"after":{"type":"object","properties":{"meta":{"type":"object","properties":{"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"options":{"nullable":true}},"required":["name","type","cellValueType"]},"data":{"nullable":true}},"required":["meta"]},"createdTime":{"type":"string"},"createdBy":{"type":"string"}},"required":["id","tableId","recordId","fieldId","before","after","createdTime","createdBy"]}},"userMap":{"type":"object","additionalProperties":{"type":"object","properties":{"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"id":{"type":"string"},"name":{"type":"string"}},"required":["email","avatar","id","name"]}},"nextCursor":{"type":"string","nullable":true}},"required":["historyList","userMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/history \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/history';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/history',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/history\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/uploadAttachment":{"post":{"summary":"Upload attachment","description":"Upload an attachment from a file or URL and append it to the cell","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string","description":"ID of an attachment field"},"required":true,"description":"ID of an attachment field","name":"fieldId","in":"path"}],"requestBody":{"description":"upload attachment","required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"fileUrl":{"type":"string"}}}}}},"responses":{"201":{"description":"Returns record data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form file=string \\\n --form fileUrl=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment';\nconst form = new FormData();\nform.append('file', 'string');\nform.append('fileUrl', 'string');\n\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"fileUrl\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"fileUrl\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/uploadAttachment\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/insertAttachment":{"post":{"summary":"Insert attachments at anchor","description":"Insert attachments after the anchor in the cell (append to end if anchor not found or not provided)","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string","description":"ID of an attachment field"},"required":true,"description":"ID of an attachment field","name":"fieldId","in":"path"}],"requestBody":{"description":"Attachments to insert and optional anchor position","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"token":{"type":"string"},"size":{"type":"number"},"mimetype":{"type":"string"},"presignedUrl":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"smThumbnailUrl":{"type":"string"},"lgThumbnailUrl":{"type":"string"}},"required":["id","name","path","token","size","mimetype"]},"minItems":1},"anchorId":{"type":"string"}},"required":["attachments"]}}}},"responses":{"201":{"description":"Returns record data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachments\":[{\"id\":\"string\",\"name\":\"string\",\"path\":\"string\",\"token\":\"string\",\"size\":0,\"mimetype\":\"string\",\"presignedUrl\":\"string\",\"width\":0,\"height\":0,\"smThumbnailUrl\":\"string\",\"lgThumbnailUrl\":\"string\"}],\"anchorId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachments\":[{\"id\":\"string\",\"name\":\"string\",\"path\":\"string\",\"token\":\"string\",\"size\":0,\"mimetype\":\"string\",\"presignedUrl\":\"string\",\"width\":0,\"height\":0,\"smThumbnailUrl\":\"string\",\"lgThumbnailUrl\":\"string\"}],\"anchorId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n attachments: [\n {\n id: 'string',\n name: 'string',\n path: 'string',\n token: 'string',\n size: 0,\n mimetype: 'string',\n presignedUrl: 'string',\n width: 0,\n height: 0,\n smThumbnailUrl: 'string',\n lgThumbnailUrl: 'string'\n }\n ],\n anchorId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"path\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\",\\\"size\\\":0,\\\"mimetype\\\":\\\"string\\\",\\\"presignedUrl\\\":\\\"string\\\",\\\"width\\\":0,\\\"height\\\":0,\\\"smThumbnailUrl\\\":\\\"string\\\",\\\"lgThumbnailUrl\\\":\\\"string\\\"}],\\\"anchorId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/insertAttachment\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/status":{"get":{"summary":"Get record status","description":"Retrieve the visibility and deletion status of a specific record.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"required":false,"description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details","name":"fieldKeyType","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"List of records","content":{"application/json":{"schema":{"type":"object","properties":{"isVisible":{"type":"boolean"},"isDeleted":{"type":"boolean"}},"required":["isVisible","isDeleted"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/status?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/auto-fill":{"post":{"summary":"Auto-fill a cell by AI","description":"Automatically fill a cell in a specific record and field","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the updated record status","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/auto-fill\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/button-click":{"post":{"summary":"Button click","description":"Button click","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the clicked cell","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string"},"tableId":{"type":"string"},"fieldId":{"type":"string"},"record":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}},"required":["runId","tableId","fieldId","record"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-click\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/{recordId}/{fieldId}/button-reset":{"post":{"summary":"Button reset","description":"Button reset","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the reset cell","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/%7BrecordId%7D/%7BfieldId%7D/button-reset\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/collaborators":{"get":{"description":"Get collaborators of a record.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["userId","userName","email"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/record/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/record/form-submit":{"post":{"summary":"Submit form","description":"Submit a record through a form view. This will trigger \"When form submitted\" automations.","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","description":"Form view ID"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"typecast":{"type":"boolean"}},"required":["viewId","fields"]}}}},"responses":{"201":{"description":"Returns the created record.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/record/form-submit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"string\",\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/record/form-submit';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"string\",\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/record/form-submit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({viewId: 'string', fields: {property1: null, property2: null}, typecast: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"string\\\",\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"typecast\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/record/form-submit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field":{"post":{"summary":"Create field","description":"Create a new field in the specified table with the given configuration","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"The id of the field that start with \"fld\", followed by exactly 16 alphanumeric characters `/^fld[\\da-zA-Z]{16}$/`. It is sometimes useful to specify an id at creation time","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]}}}},"responses":{"201":{"description":"Returns data about a field.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n },\n id: 'fldxxxxxxxxxxxxxxxx',\n order: {viewId: 'string', orderIndex: 0}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"},\\\"id\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"orderIndex\\\":0}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"List fields","description":"Retrieve a list of fields in a table with optional filtering","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","description":"The id of the view."},"required":false,"description":"The id of the view.","name":"viewId","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"filterHidden","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"}],"responses":{"200":{"description":"Returns the list of field.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field?viewId=SOME_STRING_VALUE&filterHidden=SOME_BOOLEAN_VALUE&projection=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"summary":"Delete multiple fields","description":"Permanently remove multiple fields from the specified table","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"fieldIds","in":"query"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/field?fieldIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}":{"delete":{"summary":"Delete field","description":"Permanently remove a field from the specified table","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get a field","description":"Retrieve detailed information about a specific field by its ID","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns data about a field.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"summary":"Update field","description":"Update common properties of a field (name, description, dbFieldName). For other property changes, use the convert field API","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."}}}}}},"responses":{"200":{"description":"Updated Successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"this is a summary\",\"dbFieldName\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"this is a summary\",\"dbFieldName\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'this is a summary', dbFieldName: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"this is a summary\\\",\\\"dbFieldName\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/convert":{"put":{"summary":"Convert field type","description":"Convert field to a different type with automatic type casting and symmetric field handling","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false},{"nullable":true}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."}},"required":["type"],"description":"Provide the complete field configuration including all properties, modified or not"}}}},"responses":{"200":{"description":"Returns field data after update.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/convert\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/filter-link-records":{"get":{"description":"Getting associated records for a view filter configuration.","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns the view to filter the configured records.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/filter-link-records\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/filter-link-records":{"get":{"summary":"Get linked records for filter","description":"Retrieve associated records that match the view filter configuration for a linked field","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns the link field to filter the configured records.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/filter-link-records\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/auto-fill":{"post":{"summary":"Auto-fill a field by AI","description":"Automatically generate suggestions for filling a specific field","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"filter":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"orderBy":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"groupBy":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"mode":{"type":"string","enum":["all","emptyOnly"],"default":"all"}}}}}},"responses":{"200":{"description":"Returns the task ID for the auto-fill process","content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string","nullable":true},"rowCount":{"type":"number"},"processedCount":{"type":"number"},"isLimited":{"type":"boolean"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"viwXXXXXXX\",\"filter\":\"string\",\"orderBy\":\"string\",\"groupBy\":\"string\",\"ignoreViewQuery\":\"string\",\"mode\":\"all\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"viwXXXXXXX\",\"filter\":\"string\",\"orderBy\":\"string\",\"groupBy\":\"string\",\"ignoreViewQuery\":\"string\",\"mode\":\"all\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n viewId: 'viwXXXXXXX',\n filter: 'string',\n orderBy: 'string',\n groupBy: 'string',\n ignoreViewQuery: 'string',\n mode: 'all'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"filter\\\":\\\"string\\\",\\\"orderBy\\\":\\\"string\\\",\\\"groupBy\\\":\\\"string\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"mode\\\":\\\"all\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/auto-fill\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/stop-fill":{"post":{"summary":"Stop auto-fill a field by AI","description":"Stop auto-fill a field by AI","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Stop auto-fill a field by AI successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/stop-fill\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/duplicate":{"post":{"summary":"Duplicate field","description":"Duplicate field","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"viewId":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Returns duplicated field data","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"viewId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"viewId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', viewId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"viewId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/delete-references":{"get":{"description":"Get resources that reference the given fields (for delete impact analysis)","tags":["field"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"fieldIds","in":"query"}],"responses":{"200":{"description":"Returns the referenced resources for the given fields","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"workflowNodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"type":{"type":"string"},"category":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","name","base"]}},"required":["id","type","category","source"]}},"authorityMatrixRoles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"views":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","name","base"]}},"required":["id","name","type","source"]}},"dependentFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["id","name"]}},"required":["id","name","base"]}},"required":["id","name","type","source"]}}},"required":["workflowNodes","authorityMatrixRoles","views","dependentFields"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/delete-references?fieldIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view":{"post":{"description":"Create a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]}}}},"responses":{"201":{"description":"Returns data about a view.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n type: 'grid',\n description: 'string',\n order: 0,\n options: {\n rowHeight: 'short',\n fieldNameDisplayLines: 1,\n frozenColumnCount: 0,\n frozenFieldId: 'string'\n },\n sort: {sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true},\n filter: {},\n group: [{fieldId: 'string', order: 'asc'}],\n isLocked: true,\n shareId: 'string',\n enableShare: true,\n shareMeta: {\n allowCopy: true,\n includeHiddenField: true,\n password: 'string',\n includeRecords: true,\n submit: {allow: true, requireLogin: true}\n },\n columnMeta: {\n property1: {order: 0, width: 0, hidden: true, statisticFunc: 'count'},\n property2: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"type\\\":\\\"grid\\\",\\\"description\\\":\\\"string\\\",\\\"order\\\":0,\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"},\\\"sort\\\":{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true},\\\"filter\\\":{},\\\"group\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"isLocked\\\":true,\\\"shareId\\\":\\\"string\\\",\\\"enableShare\\\":true,\\\"shareMeta\\\":{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}},\\\"columnMeta\\\":{\\\"property1\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"},\\\"property2\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get view list","description":"Get view list","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns the list of view.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}":{"delete":{"description":"Delete a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns data about a view.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/manual-sort":{"put":{"description":"Update view raw order","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}}},"required":["sortObjs"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({sortObjs: [{fieldId: 'string', order: 'asc'}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/manual-sort\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/column-meta":{"put":{"description":"Update view column meta","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"Field ID"},"columnMeta":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"additionalProperties":false}]}},"required":["fieldId","columnMeta"]}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '[{\"fieldId\":\"string\",\"columnMeta\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}]'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '[{\"fieldId\":\"string\",\"columnMeta\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}]'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify([\n {\n fieldId: 'string',\n columnMeta: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n }\n]));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"[{\\\"fieldId\\\":\\\"string\\\",\\\"columnMeta\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}]\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/column-meta\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/filter":{"put":{"description":"Update view filter","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","example":{"filter":{"filterSet":[{"isSymbol":false,"fieldId":"fldxxxxxxxxxxxxxxxx","value":"value","operator":"is"}],"conjunction":"and"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"filter\":{\"filterSet\":[{\"isSymbol\":false,\"fieldId\":\"fldxxxxxxxxxxxxxxxx\",\"value\":\"value\",\"operator\":\"is\"}],\"conjunction\":\"and\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/filter';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"filter\":{\"filterSet\":[{\"isSymbol\":false,\"fieldId\":\"fldxxxxxxxxxxxxxxxx\",\"value\":\"value\",\"operator\":\"is\"}],\"conjunction\":\"and\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/filter',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n filter: {\n filterSet: [\n {\n isSymbol: false,\n fieldId: 'fldxxxxxxxxxxxxxxxx',\n value: 'value',\n operator: 'is'\n }\n ],\n conjunction: 'and'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"filter\\\":{\\\"filterSet\\\":[{\\\"isSymbol\\\":false,\\\"fieldId\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"value\\\":\\\"value\\\",\\\"operator\\\":\\\"is\\\"}],\\\"conjunction\\\":\\\"and\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/filter\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/sort":{"put":{"description":"Update view sort condition","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/sort \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/sort';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/sort',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/sort\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/group":{"put":{"description":"Update view group condition","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/group \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '[{\"fieldId\":\"string\",\"order\":\"asc\"}]'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/group';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '[{\"fieldId\":\"string\",\"order\":\"asc\"}]'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/group',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify([{fieldId: 'string', order: 'asc'}]));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}]\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/group\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/options":{"patch":{"description":"Update view option","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]}},"required":["options"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/options \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/options';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/options',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n options: {\n rowHeight: 'short',\n fieldNameDisplayLines: 1,\n frozenColumnCount: 0,\n frozenFieldId: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/options\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/record-order":{"put":{"description":"Update record order in view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string","description":"Id of the record that you want to move other records around"},"position":{"type":"string","enum":["before","after"]},"recordIds":{"type":"array","items":{"type":"string"},"maxItems":1000,"description":"Ids of those records you want to move","maxLength":1000}},"required":["anchorId","position","recordIds"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\",\"recordIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\",\"recordIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before', recordIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\",\\\"recordIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/record-order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/name":{"put":{"description":"Update view name","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/name';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/description":{"put":{"description":"Update view description","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"}},"required":["description"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/description \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/description';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"description\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/description',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/description\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/share-meta":{"put":{"description":"Update view share meta","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n allowCopy: true,\n includeHiddenField: true,\n password: 'string',\n includeRecords: true,\n submit: {allow: true, requireLogin: true}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/share-meta\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/refresh-share-id":{"post":{"description":"Refresh view share id","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"201":{"description":"Returns successfully refreshed view share id","content":{"application/json":{"schema":{"type":"object","properties":{"shareId":{"type":"string"}},"required":["shareId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/refresh-share-id\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/disable-share":{"post":{"description":"Disable view share","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"201":{"description":"Returns successfully disable view share"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/disable-share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/enable-share":{"post":{"description":"Enable view share","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"201":{"description":"Returns successfully enable view share","content":{"application/json":{"schema":{"type":"object","properties":{"shareId":{"type":"string"}},"required":["shareId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/enable-share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/plugin":{"post":{"description":"Install a plugin to a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["pluginId"]}}}},"responses":{"201":{"description":"Returns data about the installed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"viewId":{"type":"string"}},"required":["pluginId","pluginInstallId","name","viewId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/plugin';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/plugin/{pluginInstallId}":{"patch":{"description":"Update storage of a plugin in a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Returns data about the updated plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"tableId":{"type":"string"},"viewId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["tableId","viewId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin/%7BpluginInstallId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/plugin":{"get":{"description":"Get a view install plugin by id","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"responses":{"200":{"description":"Returns data about the view install plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/plugin\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/locked":{"put":{"description":"Update the locked status of the view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isLocked":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/locked \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"isLocked\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/locked';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"isLocked\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/locked',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({isLocked: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isLocked\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/locked\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/duplicate":{"post":{"description":"Duplicate a view","tags":["view"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"viewId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]}}}},"responses":{"201":{"description":"Returns data about a view.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n type: 'grid',\n description: 'string',\n order: 0,\n options: {\n rowHeight: 'short',\n fieldNameDisplayLines: 1,\n frozenColumnCount: 0,\n frozenFieldId: 'string'\n },\n sort: {sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true},\n filter: {},\n group: [{fieldId: 'string', order: 'asc'}],\n isLocked: true,\n shareId: 'string',\n enableShare: true,\n shareMeta: {\n allowCopy: true,\n includeHiddenField: true,\n password: 'string',\n includeRecords: true,\n submit: {allow: true, requireLogin: true}\n },\n columnMeta: {\n property1: {order: 0, width: 0, hidden: true, statisticFunc: 'count'},\n property2: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"type\\\":\\\"grid\\\",\\\"description\\\":\\\"string\\\",\\\"order\\\":0,\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"},\\\"sort\\\":{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true},\\\"filter\\\":{},\\\"group\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"isLocked\\\":true,\\\"shareId\\\":\\\"string\\\",\\\"enableShare\\\":true,\\\"shareMeta\\\":{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}},\\\"columnMeta\\\":{\\\"property1\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"},\\\"property2\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/view/%7BviewId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation":{"get":{"summary":"Get aggregated statistics","description":"Returns statistical aggregations of table data based on specified functions and grouping criteria","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns aggregations list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"aggregations":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"total":{"type":"object","nullable":true,"properties":{"value":{"anyOf":[{"type":"string"},{"type":"number"},{"nullable":true}]},"aggFunc":{"type":"string","enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"]}},"required":["value","aggFunc"],"description":"Aggregations by all data in field"},"group":{"type":"object","nullable":true,"additionalProperties":{"type":"object","properties":{"value":{"anyOf":[{"type":"string"},{"type":"number"},{"nullable":true}]},"aggFunc":{"type":"string","enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"]}},"required":["value","aggFunc"]},"description":"Aggregations by grouped data in field"}},"required":["fieldId","total"]}}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/aggregation \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/row-count":{"get":{"summary":"Get total row count","description":"Returns the total number of rows in a view based on applied filters and criteria","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"Row count for the view","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number"}},"required":["rowCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/row-count?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/group-points":{"get":{"summary":"Get group points","description":"Returns the distribution and count of records across different group points in the view","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Group points for the view","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/group-points?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/calendar-daily-collection":{"get":{"summary":"Get daily calendar data","description":"Returns records and count distribution across dates based on specified date range and fields","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDateFieldId","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDateFieldId","in":"query"}],"responses":{"200":{"description":"Calendar daily collection for the view","content":{"application/json":{"schema":{"type":"object","properties":{"countMap":{"type":"object","additionalProperties":{"type":"number"}},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}},"required":["countMap","records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/calendar-daily-collection?viewId=viwXXXXXXX&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/search-count":{"get":{"summary":"Get total count of search","description":"Returns the total count of records matching the specified search criteria and filters","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Search count with query","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/search-index":{"get":{"summary":"Get record indices for search","description":"Returns the indices and record IDs of records matching the search criteria","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"record index with search query","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"type":"object","properties":{"index":{"type":"number"},"fieldId":{"type":"string"},"recordId":{"type":"string"}},"required":["index","fieldId","recordId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/task-status-collection":{"get":{"summary":"Get task status collection","description":"Returns records and count distribution across task status based on specified date range and fields","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Task status collection for the view","content":{"application/json":{"schema":{"type":"object","properties":{"cells":{"type":"array","items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldId":{"type":"string"}},"required":["recordId","fieldId"]}},"fieldMap":{"type":"object","additionalProperties":{"type":"object","properties":{"taskId":{"type":"string"},"completedCount":{"type":"number"},"totalCount":{"type":"number"}},"required":["taskId","completedCount","totalCount"]}}},"required":["cells","fieldMap"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/aggregation/task-status-collection \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/task-status-collection';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/task-status-collection',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/task-status-collection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/aggregation/record-index":{"get":{"summary":"Get record index","description":"Returns the 0-based row index of a specific record in the current query context (respecting view filters, sort order, link filters)","tags":["aggregation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"query"}],"responses":{"200":{"description":"Record index in the current query context","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"index":{"type":"number"}},"required":["index"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/aggregation/record-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&recordId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/":{"post":{"summary":"Create table","description":"Create a new table in the specified base with customizable fields, views, and initial records. Default configurations will be applied if not specified.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the base."},"description":{"type":"string","nullable":true,"description":"The description of the table."},"icon":{"type":"string","nullable":true,"format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"The id of the field that start with \"fld\", followed by exactly 16 alphanumeric characters `/^fld[\\da-zA-Z]{16}$/`. It is sometimes useful to specify an id at creation time","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]},"description":"The fields of the table. If it is empty, 3 fields include SingleLineText, Number, SingleSelect will and 3 empty records be generated by default."},"views":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]},"description":"The views of the table. If it is empty, a grid view will be generated by default."},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"example":[{"fields":{"single line text":"text value"}}],"description":"The record data of the table. If it is empty, 3 empty records will be generated by default."},"order":{"type":"number"},"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"}},"description":"params for create a table"}}}},"responses":{"201":{"description":"Returns data about a table.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the base."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]},"description":"The fields of the table."},"views":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]},"description":"The views of the table."},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"description":"The records of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName","fields","views","records"],"description":"Complete table structure data and initial record data."}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/ \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"dbTableName\":\"string\",\"description\":\"string\",\"icon\":\"string\",\"fields\":[{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}],\"views\":[{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}],\"records\":[{\"fields\":{\"single line text\":\"text value\"}}],\"order\":0,\"fieldKeyType\":\"id\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"dbTableName\":\"string\",\"description\":\"string\",\"icon\":\"string\",\"fields\":[{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}],\"views\":[{\"name\":\"string\",\"type\":\"grid\",\"description\":\"string\",\"order\":0,\"options\":{\"rowHeight\":\"short\",\"fieldNameDisplayLines\":1,\"frozenColumnCount\":0,\"frozenFieldId\":\"string\"},\"sort\":{\"sortObjs\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"manualSort\":true},\"filter\":{},\"group\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"isLocked\":true,\"shareId\":\"string\",\"enableShare\":true,\"shareMeta\":{\"allowCopy\":true,\"includeHiddenField\":true,\"password\":\"string\",\"includeRecords\":true,\"submit\":{\"allow\":true,\"requireLogin\":true}},\"columnMeta\":{\"property1\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"},\"property2\":{\"order\":0,\"width\":0,\"hidden\":true,\"statisticFunc\":\"count\"}}}],\"records\":[{\"fields\":{\"single line text\":\"text value\"}}],\"order\":0,\"fieldKeyType\":\"id\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n dbTableName: 'string',\n description: 'string',\n icon: 'string',\n fields: [\n {\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n },\n id: 'fldxxxxxxxxxxxxxxxx',\n order: {viewId: 'string', orderIndex: 0}\n }\n ],\n views: [\n {\n name: 'string',\n type: 'grid',\n description: 'string',\n order: 0,\n options: {\n rowHeight: 'short',\n fieldNameDisplayLines: 1,\n frozenColumnCount: 0,\n frozenFieldId: 'string'\n },\n sort: {sortObjs: [{fieldId: 'string', order: 'asc'}], manualSort: true},\n filter: {},\n group: [{fieldId: 'string', order: 'asc'}],\n isLocked: true,\n shareId: 'string',\n enableShare: true,\n shareMeta: {\n allowCopy: true,\n includeHiddenField: true,\n password: 'string',\n includeRecords: true,\n submit: {allow: true, requireLogin: true}\n },\n columnMeta: {\n property1: {order: 0, width: 0, hidden: true, statisticFunc: 'count'},\n property2: {order: 0, width: 0, hidden: true, statisticFunc: 'count'}\n }\n }\n ],\n records: [{fields: {'single line text': 'text value'}}],\n order: 0,\n fieldKeyType: 'id'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"dbTableName\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\",\\\"fields\\\":[{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"},\\\"id\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"orderIndex\\\":0}}],\\\"views\\\":[{\\\"name\\\":\\\"string\\\",\\\"type\\\":\\\"grid\\\",\\\"description\\\":\\\"string\\\",\\\"order\\\":0,\\\"options\\\":{\\\"rowHeight\\\":\\\"short\\\",\\\"fieldNameDisplayLines\\\":1,\\\"frozenColumnCount\\\":0,\\\"frozenFieldId\\\":\\\"string\\\"},\\\"sort\\\":{\\\"sortObjs\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"manualSort\\\":true},\\\"filter\\\":{},\\\"group\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"isLocked\\\":true,\\\"shareId\\\":\\\"string\\\",\\\"enableShare\\\":true,\\\"shareMeta\\\":{\\\"allowCopy\\\":true,\\\"includeHiddenField\\\":true,\\\"password\\\":\\\"string\\\",\\\"includeRecords\\\":true,\\\"submit\\\":{\\\"allow\\\":true,\\\"requireLogin\\\":true}},\\\"columnMeta\\\":{\\\"property1\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"},\\\"property2\\\":{\\\"order\\\":0,\\\"width\\\":0,\\\"hidden\\\":true,\\\"statisticFunc\\\":\\\"count\\\"}}}],\\\"records\\\":[{\\\"fields\\\":{\\\"single line text\\\":\\\"text value\\\"}}],\\\"order\\\":0,\\\"fieldKeyType\\\":\\\"id\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}":{"delete":{"summary":"Delete table","description":"Move a table to trash. The table can be restored within the retention period.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Table successfully moved to trash."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"summary":"Get table details","description":"Retrieve detailed information about a specific table, including its schema, name, and configuration.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns data about a table.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the base."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table":{"get":{"summary":"List tables","description":"Retrieve a list of all tables in the specified base, including their basic information and configurations.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successfully retrieved the list of tables.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the base."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]},"description":"The list of tables."}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/permanent":{"delete":{"summary":"Permanently delete table","description":"Permanently delete a table and all its data. This action cannot be undone.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Table and all associated data permanently deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/name":{"put":{"summary":"Update table name","description":"Update the display name of a table. This will not affect the underlying database table name.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Table name successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/name';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/icon":{"put":{"summary":"Update table tcon","description":"Update the emoji icon of a table. The icon must be a valid emoji character.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"icon":{"type":"string","format":"emoji"}},"required":["icon"]}}}},"responses":{"200":{"description":"Table icon successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/icon\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/order":{"put":{"summary":"Update table order","description":"Update the display order of a table in the base. This affects the order in which tables are shown in the UI.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Table order successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/description":{"put":{"summary":"Update table description","description":"Update or remove the description of a table. Set to null to remove the description.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","nullable":true}},"required":["description"]}}}},"responses":{"200":{"description":"Table description successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/description \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/description';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"description\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/description',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/description\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/db-table-name":{"put":{"summary":"Update db table name","description":"Update the physical database table name. Must be 1-63 characters, start with letter or underscore, contain only letters, numbers and underscore, and be unique within the base.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dbTableName":{"type":"string","minLength":1,"pattern":"^[a-z_]\\w{0,62}$/i","description":"table name in backend database. Limitation: 1-63 characters, start with letter or underscore, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing table name in the base."}},"required":["dbTableName"]}}}},"responses":{"200":{"description":"Database table name successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"dbTableName\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"dbTableName\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({dbTableName: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"dbTableName\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/default-view-id":{"get":{"summary":"Get default view id","description":"Get default view id","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns default view id","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/default-view-id\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/permission":{"get":{"summary":"Get table permissions","description":"Retrieve the current user's permissions for a table, including access rights for table operations, views, records, and fields.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Successfully retrieved table permissions for the current user.","content":{"application/json":{"schema":{"type":"object","properties":{"table":{"type":"object","additionalProperties":{"type":"boolean"}},"view":{"type":"object","additionalProperties":{"type":"boolean"}},"record":{"type":"object","additionalProperties":{"type":"boolean"}},"field":{"type":"object","additionalProperties":{"type":"boolean"}}},"required":["table","view","record","field"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/permission\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/index":{"post":{"summary":"Toggle table index","description":"Toggle table index","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["search"]}},"required":["type"]}}}},"responses":{"201":{"description":"No return"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"search\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"search\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/index',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({type: 'search'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"search\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/index\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/activated-index":{"post":{"summary":"Get activated index","description":"Get the activated index of a table","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"201":{"description":"Returns table full text search index status","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","enum":["search"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/activated-index\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/abnormal-index":{"get":{"summary":"Get abnormal indexes","description":"Retrieve a list of abnormal database indexes for a specific table by index type. This helps identify potential performance or maintenance issues.","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","enum":["search"]},"required":true,"name":"type","in":"path"}],"responses":{"201":{"description":"Successfully retrieved list of abnormal indexes.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"indexName":{"type":"string"}},"required":["indexName"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/abnormal-index\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/index/repair":{"patch":{"summary":"Repair table index","description":"Repair table index","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","enum":["search"]},"required":true,"name":"type","in":"path"}],"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/index/repair\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/duplicate":{"post":{"description":"Duplicate a table","summary":"Duplicate a table","tags":["table"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"includeRecords":{"type":"boolean"}},"required":["name","includeRecords"]}}}},"responses":{"200":{"description":"Duplicate successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"includeRecords\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"includeRecords\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', includeRecords: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"includeRecords\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/range-to-id":{"get":{"summary":"Get ids from range","description":"Retrieve record and field identifiers based on the selected range coordinates in a table","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"},{"schema":{"type":"string","enum":["recordId","fieldId","all"],"description":"Define which Id to return."},"required":true,"description":"Define which Id to return.","name":"returnType","in":"query"}],"responses":{"200":{"description":"Copy content","content":{"application/json":{"schema":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"}},"fieldIds":{"type":"array","items":{"type":"string"}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/selection/range-to-id?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns&returnType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/clear":{"patch":{"summary":"Clear selected range content","description":"Remove all content from the selected table range","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"filterByTql":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"search":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"filterLinkCellCandidate":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"filterLinkCellSelected":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"selectedRecordIds":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"orderBy":{"type":"array","description":"An array of sort objects that specifies how the records should be ordered."},"groupBy":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"collapsedGroupIds":{"type":"array","items":{"type":"string"}},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"projection":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":1,"description":"The parameter \"ranges\" is used to represent the coordinates of a selected range in a table. ","example":[[0,0],[1,1]]},"type":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"}},"required":["ranges"]}}}},"responses":{"200":{"description":"Successful clean up"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/clear \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = '\\''Completed'\\'' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/clear';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = \\'Completed\\' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/clear',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n viewId: 'viwXXXXXXX',\n ignoreViewQuery: 'string',\n filterByTql: '{field} = \\'Completed\\' AND {field} > 5',\n filter: {},\n search: ['searchValue', 'fieldIdOrName', false],\n filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n selectedRecordIds: ['string'],\n orderBy: [],\n groupBy: [{fieldId: 'string', order: 'asc'}],\n collapsedGroupIds: ['string'],\n queryId: 'qry_xxxxxxxx',\n projection: ['string'],\n ranges: [[0, 0], [1, 1]],\n type: 'columns'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"filterByTql\\\":\\\"{field} = 'Completed' AND {field} > 5\\\",\\\"filter\\\":{},\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":[],\\\"groupBy\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"collapsedGroupIds\\\":[\\\"string\\\"],\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"projection\\\":[\\\"string\\\"],\\\"ranges\\\":[[0,0],[1,1]],\\\"type\\\":\\\"columns\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/clear\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/copy":{"get":{"summary":"Copy selected table content","description":"Copy content from selected table ranges including headers if specified","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"}],"responses":{"200":{"description":"Copy content","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}},"required":["content","header"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/selection/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/paste":{"patch":{"summary":"Paste content into selected range","description":"Apply paste operation to insert content into the selected table range","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"filterByTql":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"search":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"filterLinkCellCandidate":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"filterLinkCellSelected":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"selectedRecordIds":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"orderBy":{"type":"array","description":"An array of sort objects that specifies how the records should be ordered."},"groupBy":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"collapsedGroupIds":{"type":"array","items":{"type":"string"}},"queryId":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"projection":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":1,"description":"The parameter \"ranges\" is used to represent the coordinates of a selected range in a table. ","example":[[0,0],[1,1]]},"type":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"content":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"array","items":{"nullable":true}}}],"description":"Content to paste","example":"John\tDoe\tjohn.doe@example.com"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]},"description":"Table header for paste operation","example":[]}},"required":["ranges","content"]}}}},"responses":{"200":{"description":"Paste successfully","content":{"application/json":{"schema":{"type":"object","properties":{"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":2,"maxItems":2}},"required":["ranges"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/paste \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = '\\''Completed'\\'' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/paste';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"viwXXXXXXX\",\"ignoreViewQuery\":\"string\",\"filterByTql\":\"{field} = \\'Completed\\' AND {field} > 5\",\"filter\":{},\"search\":[\"searchValue\",\"fieldIdOrName\",false],\"filterLinkCellCandidate\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"filterLinkCellSelected\":[\"fldXXXXXXX\",\"recXXXXXXX\"],\"selectedRecordIds\":[\"string\"],\"orderBy\":[],\"groupBy\":[{\"fieldId\":\"string\",\"order\":\"asc\"}],\"collapsedGroupIds\":[\"string\"],\"queryId\":\"qry_xxxxxxxx\",\"projection\":[\"string\"],\"ranges\":[[0,0],[1,1]],\"type\":\"columns\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/paste',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n viewId: 'viwXXXXXXX',\n ignoreViewQuery: 'string',\n filterByTql: '{field} = \\'Completed\\' AND {field} > 5',\n filter: {},\n search: ['searchValue', 'fieldIdOrName', false],\n filterLinkCellCandidate: ['fldXXXXXXX', 'recXXXXXXX'],\n filterLinkCellSelected: ['fldXXXXXXX', 'recXXXXXXX'],\n selectedRecordIds: ['string'],\n orderBy: [],\n groupBy: [{fieldId: 'string', order: 'asc'}],\n collapsedGroupIds: ['string'],\n queryId: 'qry_xxxxxxxx',\n projection: ['string'],\n ranges: [[0, 0], [1, 1]],\n type: 'columns',\n content: 'John\tDoe\tjohn.doe@example.com',\n header: []\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"filterByTql\\\":\\\"{field} = 'Completed' AND {field} > 5\\\",\\\"filter\\\":{},\\\"search\\\":[\\\"searchValue\\\",\\\"fieldIdOrName\\\",false],\\\"filterLinkCellCandidate\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"filterLinkCellSelected\\\":[\\\"fldXXXXXXX\\\",\\\"recXXXXXXX\\\"],\\\"selectedRecordIds\\\":[\\\"string\\\"],\\\"orderBy\\\":[],\\\"groupBy\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"order\\\":\\\"asc\\\"}],\\\"collapsedGroupIds\\\":[\\\"string\\\"],\\\"queryId\\\":\\\"qry_xxxxxxxx\\\",\\\"projection\\\":[\\\"string\\\"],\\\"ranges\\\":[[0,0],[1,1]],\\\"type\\\":\\\"columns\\\",\\\"content\\\":\\\"John\\\\tDoe\\\\tjohn.doe@example.com\\\",\\\"header\\\":[]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/paste\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/delete":{"delete":{"summary":"Delete selected range data","description":"Delete records or fields within the selected table range","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"}],"responses":{"200":{"description":"Successful deletion","content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/selection/delete?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/selection/temporaryPaste":{"patch":{"summary":"Preview paste operation results","description":"Preview the results of a paste operation without applying changes to the table","tags":["selection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"ranges":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"minItems":1,"description":"The parameter \"ranges\" is used to represent the coordinates of a selected range in a table. ","example":[[0,0],[1,1]]},"projection":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"ignoreViewQuery":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"content":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"array","items":{"nullable":true}}}],"description":"Content to paste","example":"John\tDoe\tjohn.doe@example.com"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]},"description":"Table header for paste operation","example":[]}},"required":["ranges","content"]}}}},"responses":{"200":{"description":"Paste successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/selection/temporaryPaste \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"viewId\":\"viwXXXXXXX\",\"ranges\":[[0,0],[1,1]],\"projection\":[\"string\"],\"ignoreViewQuery\":\"string\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/selection/temporaryPaste';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"viewId\":\"viwXXXXXXX\",\"ranges\":[[0,0],[1,1]],\"projection\":[\"string\"],\"ignoreViewQuery\":\"string\",\"content\":\"John\\tDoe\\tjohn.doe@example.com\",\"header\":[]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/selection/temporaryPaste',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n viewId: 'viwXXXXXXX',\n ranges: [[0, 0], [1, 1]],\n projection: ['string'],\n ignoreViewQuery: 'string',\n content: 'John\tDoe\tjohn.doe@example.com',\n header: []\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"viewId\\\":\\\"viwXXXXXXX\\\",\\\"ranges\\\":[[0,0],[1,1]],\\\"projection\\\":[\\\"string\\\"],\\\"ignoreViewQuery\\\":\\\"string\\\",\\\"content\\\":\\\"John\\\\tDoe\\\\tjohn.doe@example.com\\\",\\\"header\\\":[]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/selection/temporaryPaste\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/{fieldId}/plan":{"get":{"description":"Generate calculation plan for the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the calculation plan for the field","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"}},"required":["estimateTime","updateCellCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Generate calculation plan for converting the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false},{"nullable":true}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."}},"required":["type"]}}}},"responses":{"201":{"description":"Returns the calculation plan","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"},"skip":{"type":"boolean"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Generate calculation plan for deleting the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the calculation plan for deleting the field","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/field/%7BfieldId%7D/plan\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/field/plan":{"post":{"description":"Generate calculation plan for creating the field","tags":["plan"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"The id of the field that start with \"fld\", followed by exactly 16 alphanumeric characters `/^fld[\\da-zA-Z]{16}$/`. It is sometimes useful to specify an id at creation time","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]}}}},"responses":{"201":{"description":"Returns the calculation plan for creating the field","content":{"application/json":{"schema":{"type":"object","properties":{"estimateTime":{"type":"number"},"graph":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"comboId":{"type":"string"}},"required":["id"],"additionalProperties":{"nullable":true}}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"}},"required":["source","target"],"additionalProperties":{"nullable":true}}},"combos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"],"additionalProperties":{"nullable":true}}}},"required":["nodes","edges","combos"]},"updateCellCount":{"type":"number"},"linkFieldCount":{"type":"number"}},"required":["estimateTime","updateCellCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/field/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/field/plan';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"singleSelect\",\"name\":\"string\",\"unique\":true,\"notNull\":true,\"dbFieldName\":\"string\",\"isLookup\":true,\"isConditionalLookup\":true,\"description\":\"this is a summary\",\"lookupOptions\":{\"foreignTableId\":\"string\",\"lookupFieldId\":\"string\",\"linkFieldId\":\"string\",\"filter\":{}},\"options\":{\"expression\":\"countall({values})\",\"timeZone\":\"string\",\"formatting\":null,\"showAs\":{\"type\":\"url\"}},\"aiConfig\":{\"modelKey\":\"string\",\"isAutoFill\":true,\"attachPrompt\":\"string\",\"type\":\"extraction\",\"sourceFieldId\":\"string\"},\"id\":\"fldxxxxxxxxxxxxxxxx\",\"order\":{\"viewId\":\"string\",\"orderIndex\":0}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/field/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'singleSelect',\n name: 'string',\n unique: true,\n notNull: true,\n dbFieldName: 'string',\n isLookup: true,\n isConditionalLookup: true,\n description: 'this is a summary',\n lookupOptions: {\n foreignTableId: 'string',\n lookupFieldId: 'string',\n linkFieldId: 'string',\n filter: {}\n },\n options: {\n expression: 'countall({values})',\n timeZone: 'string',\n formatting: null,\n showAs: {type: 'url'}\n },\n aiConfig: {\n modelKey: 'string',\n isAutoFill: true,\n attachPrompt: 'string',\n type: 'extraction',\n sourceFieldId: 'string'\n },\n id: 'fldxxxxxxxxxxxxxxxx',\n order: {viewId: 'string', orderIndex: 0}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"singleSelect\\\",\\\"name\\\":\\\"string\\\",\\\"unique\\\":true,\\\"notNull\\\":true,\\\"dbFieldName\\\":\\\"string\\\",\\\"isLookup\\\":true,\\\"isConditionalLookup\\\":true,\\\"description\\\":\\\"this is a summary\\\",\\\"lookupOptions\\\":{\\\"foreignTableId\\\":\\\"string\\\",\\\"lookupFieldId\\\":\\\"string\\\",\\\"linkFieldId\\\":\\\"string\\\",\\\"filter\\\":{}},\\\"options\\\":{\\\"expression\\\":\\\"countall({values})\\\",\\\"timeZone\\\":\\\"string\\\",\\\"formatting\\\":null,\\\"showAs\\\":{\\\"type\\\":\\\"url\\\"}},\\\"aiConfig\\\":{\\\"modelKey\\\":\\\"string\\\",\\\"isAutoFill\\\":true,\\\"attachPrompt\\\":\\\"string\\\",\\\"type\\\":\\\"extraction\\\",\\\"sourceFieldId\\\":\\\"string\\\"},\\\"id\\\":\\\"fldxxxxxxxxxxxxxxxx\\\",\\\"order\\\":{\\\"viewId\\\":\\\"string\\\",\\\"orderIndex\\\":0}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/field/plan\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/name":{"patch":{"description":"Update user name","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/name';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/avatar":{"patch":{"description":"Update user avatar","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/avatar \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form file=string"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/avatar';\nconst form = new FormData();\nform.append('file', 'string');\n\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/avatar',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nstring\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/user/avatar\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/notify-meta":{"patch":{"description":"Update user notification meta","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/notify-meta \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/notify-meta';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/notify-meta',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user/notify-meta\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/lang":{"patch":{"description":"Update user language","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lang":{"type":"string"}},"required":["lang"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user/lang \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"lang\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/lang';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"lang\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/lang',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({lang: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"lang\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user/lang\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit":{"get":{"description":"Get user last visited resource","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Update or create user last visit record","tags":["user"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"parentResourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId","parentResourceId"]}}}},"responses":{"201":{"description":"Successfully updated user last visit record."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user/last-visit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"resourceType\":\"space\",\"resourceId\":\"string\",\"parentResourceId\":\"string\",\"childResourceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"resourceType\":\"space\",\"resourceId\":\"string\",\"parentResourceId\":\"string\",\"childResourceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n resourceType: 'space',\n resourceId: 'string',\n parentResourceId: 'string',\n childResourceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"resourceType\\\":\\\"space\\\",\\\"resourceId\\\":\\\"string\\\",\\\"parentResourceId\\\":\\\"string\\\",\\\"childResourceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user/last-visit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/map":{"get":{"description":"Get user last visited resource map","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit map.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit/map?resourceType=SOME_STRING_VALUE&parentResourceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/list-base":{"get":{"tags":["user"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns data about user last visit base.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number"},"list":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"resource":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"template":{"type":"object","properties":{"id":{"type":"string"},"headers":{"type":"string"}},"required":["id","headers"]},"createdUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name"]},"isCanary":{"type":"boolean"}},"required":["id","name","spaceId","icon","role","createdBy"]},"lastVisitTime":{"type":"string"}},"required":["resourceType","resourceId","resource"]}}},"required":["total","list"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/user/last-visit/list-base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/list-base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit/list-base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit/list-base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user/last-visit/base-node":{"get":{"description":"Get user last visited base node","tags":["user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit base node.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"resourceId":{"type":"string"},"childResourceId":{"type":"string"}},"required":["resourceType","resourceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user/last-visit/base-node?parentResourceId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/user/me":{"get":{"description":"Get user information","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully retrieved user information","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string","nullable":true},"notifyMeta":{"type":"object","properties":{"email":{"type":"boolean"}}},"hasPassword":{"type":"boolean"},"isAdmin":{"type":"boolean","nullable":true},"lang":{"type":"string","nullable":true},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"isAdmin":{"type":"boolean"}},"required":["id","name","departments"]}},"required":["id","name","email","notifyMeta","hasPassword"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/user/me \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user/me';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/user/me',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/user/me\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signin":{"post":{"description":"Sign in","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8,"description":"Minimum 8 chars"},"turnstileToken":{"type":"string"}},"required":["email","password"]}}}},"responses":{"201":{"description":"Sign in successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string","nullable":true},"notifyMeta":{"type":"object","properties":{"email":{"type":"boolean"}}},"hasPassword":{"type":"boolean"},"isAdmin":{"type":"boolean","nullable":true},"lang":{"type":"string","nullable":true},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"isAdmin":{"type":"boolean"}},"required":["id","name","departments"]}},"required":["id","name","email","notifyMeta","hasPassword"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/signin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signin';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/signin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', password: 'stringst', turnstileToken: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"password\\\":\\\"stringst\\\",\\\"turnstileToken\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/signin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signout":{"post":{"description":"Sign out","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Sign out successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/signout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signout';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/signout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/auth/signout\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/signup":{"post":{"description":"Sign up","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"},"turnstileToken":{"type":"string"},"defaultSpaceName":{"type":"string"},"refMeta":{"type":"object","properties":{"query":{"type":"string"},"referer":{"type":"string"}}},"verification":{"type":"object","properties":{"code":{"type":"string"},"token":{"type":"string"}},"required":["code","token"]},"inviteCode":{"type":"string"}},"required":["email","password"]}}}},"responses":{"201":{"description":"Sign up and sing in successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"},"phone":{"type":"string","nullable":true},"notifyMeta":{"type":"object","properties":{"email":{"type":"boolean"}}},"hasPassword":{"type":"boolean"},"isAdmin":{"type":"boolean","nullable":true},"lang":{"type":"string","nullable":true},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"isAdmin":{"type":"boolean"}},"required":["id","name","departments"]}},"required":["id","name","email","notifyMeta","hasPassword"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/signup \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\",\"defaultSpaceName\":\"string\",\"refMeta\":{\"query\":\"string\",\"referer\":\"string\"},\"verification\":{\"code\":\"string\",\"token\":\"string\"},\"inviteCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/signup';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"password\":\"stringst\",\"turnstileToken\":\"string\",\"defaultSpaceName\":\"string\",\"refMeta\":{\"query\":\"string\",\"referer\":\"string\"},\"verification\":{\"code\":\"string\",\"token\":\"string\"},\"inviteCode\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/signup',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n email: 'user@example.com',\n password: 'stringst',\n turnstileToken: 'string',\n defaultSpaceName: 'string',\n refMeta: {query: 'string', referer: 'string'},\n verification: {code: 'string', token: 'string'},\n inviteCode: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"password\\\":\\\"stringst\\\",\\\"turnstileToken\\\":\\\"string\\\",\\\"defaultSpaceName\\\":\\\"string\\\",\\\"refMeta\\\":{\\\"query\\\":\\\"string\\\",\\\"referer\\\":\\\"string\\\"},\\\"verification\\\":{\\\"code\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\"},\\\"inviteCode\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/signup\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/change-password":{"patch":{"description":"Change password","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":8,"description":"Minimum 8 chars"},"newPassword":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"}},"required":["password","newPassword"]}}}},"responses":{"201":{"description":"Change password successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/auth/change-password \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"stringst\",\"newPassword\":\"stringst\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/change-password';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"stringst\",\"newPassword\":\"stringst\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/change-password',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'stringst', newPassword: 'stringst'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"stringst\\\",\\\"newPassword\\\":\\\"stringst\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/auth/change-password\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/send-reset-password-email":{"post":{"description":"Send reset password email","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"201":{"description":"Successfully sent reset password email"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/send-reset-password-email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-reset-password-email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/send-reset-password-email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/send-reset-password-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/reset-password":{"post":{"description":"Reset password","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"},"code":{"type":"string"}},"required":["password","code"]}}}},"responses":{"201":{"description":"Successfully reset password"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/reset-password \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"stringst\",\"code\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/reset-password';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"stringst\",\"code\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/reset-password',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'stringst', code: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"stringst\\\",\\\"code\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/reset-password\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/add-password":{"post":{"description":"Add password","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":8,"pattern":"^(?=.*[A-Z])(?=.*\\d).{8,}$/i"}},"required":["password"]}}}},"responses":{"201":{"description":"Successfully added password"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/add-password \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"stringst\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/add-password';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"stringst\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/add-password',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'stringst'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"stringst\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/add-password\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/user":{"get":{"description":"Get user information via access token","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successfully retrieved user information","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true},"email":{"type":"string","format":"email"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/user\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete user","tags":["auth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"confirm","in":"path"}],"responses":{"200":{"description":"Successfully deleted user"},"400":{"description":"User has deleted bases or spaces","content":{"application/json":{"schema":{"type":"object","properties":{"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"deletedTime":{"type":"string","nullable":true}},"required":["id","name","deletedTime"]}}},"required":["spaces"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/auth/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/auth/user\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/send-signup-verification-code":{"post":{"description":"Send signup verification code","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"turnstileToken":{"type":"string"}},"required":["email"]}}}},"responses":{"200":{"description":"Resend signup verification code successfully","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"expiresTime":{"type":"string"}},"required":["token","expiresTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/send-signup-verification-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"turnstileToken\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-signup-verification-code';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"turnstileToken\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/send-signup-verification-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', turnstileToken: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"turnstileToken\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/send-signup-verification-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/change-email":{"patch":{"description":"Change email","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"token":{"type":"string"},"code":{"type":"string"}},"required":["email","token","code"]}}}},"responses":{"200":{"description":"Change email successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/auth/change-email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"token\":\"string\",\"code\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/change-email';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"token\":\"string\",\"code\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/change-email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', token: 'string', code: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"token\\\":\\\"string\\\",\\\"code\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/auth/change-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/send-change-email-code":{"post":{"description":"Send change email code","tags":["auth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["email","password"]}}}},"responses":{"200":{"description":"Send change email code successfully","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/send-change-email-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\",\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/send-change-email-code';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\",\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/send-change-email-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com', password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\",\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/send-change-email-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/temp-token":{"get":{"description":"Get temp token","tags":["auth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get temp token successfully","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"expiresTime":{"type":"string"}},"required":["accessToken","expiresTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/temp-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/temp-token';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/temp-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/temp-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/invite-waitlist":{"post":{"description":"Invite waitlist","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"list":{"type":"array","items":{"type":"string","format":"email"}}},"required":["list"]}}}},"responses":{"201":{"description":"Invite waitlist successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string","format":"email"},"code":{"type":"string"},"times":{"type":"number"}},"required":["email","code","times"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/invite-waitlist \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"list\":[\"user@example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/invite-waitlist';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"list\":[\"user@example.com\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/invite-waitlist',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({list: ['user@example.com']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"list\\\":[\\\"user@example.com\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/invite-waitlist\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/waitlist-invite-code":{"post":{"description":"Gen waitlist invite code","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","description":"The number of invite codes to generate","example":10},"times":{"type":"integer","description":"The number of invite codes to use","example":10}},"required":["count","times"]}}}},"responses":{"201":{"description":"Gen waitlist invite code successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"times":{"type":"integer"}},"required":["code","times"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/waitlist-invite-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"count\":10,\"times\":10}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/waitlist-invite-code';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"count\":10,\"times\":10}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/waitlist-invite-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({count: 10, times: 10}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"count\\\":10,\\\"times\\\":10}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/waitlist-invite-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/join-waitlist":{"post":{"description":"Join waitlist","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"200":{"description":"Join waitlist successfully","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/join-waitlist \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"email\":\"user@example.com\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/join-waitlist';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"email\":\"user@example.com\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/join-waitlist',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({email: 'user@example.com'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"email\\\":\\\"user@example.com\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/join-waitlist\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/auth/waitlist":{"get":{"description":"Get waitlist","tags":["auth","waitlist"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get waitlist successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string","format":"email"},"invite":{"type":"boolean","nullable":true},"inviteTime":{"type":"string","nullable":true,"format":"date"},"createdTime":{"type":"string","format":"date"}},"required":["email","invite","inviteTime","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/auth/waitlist \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/waitlist';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/waitlist',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/auth/waitlist\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/connection":{"post":{"description":"Create a db connection url","tags":["db-connection"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"}},"required":["baseId"]}}}},"responses":{"201":{"description":"Connection created successfully","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"dsn":{"type":"object","properties":{"driver":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"db":{"type":"string"},"user":{"type":"string"},"pass":{"type":"string"},"params":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"required":["driver","host"]},"connection":{"type":"object","properties":{"max":{"type":"number"},"current":{"type":"number"}},"required":["max","current"]},"url":{"type":"string","description":"The URL that can be used to connect to the database"}},"required":["dsn","connection","url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/connection \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/connection';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/connection',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/connection\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a db connection","tags":["db-connection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/connection \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/connection';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/connection',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/connection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get db connection info","tags":["db-connection"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns information about a db connection.","content":{"application/json":{"schema":{"type":"object","properties":{"dsn":{"type":"object","properties":{"driver":{"type":"string"},"host":{"type":"string"},"port":{"type":"number"},"db":{"type":"string"},"user":{"type":"string"},"pass":{"type":"string"},"params":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"required":["driver","host"]},"connection":{"type":"object","properties":{"max":{"type":"number"},"current":{"type":"number"}},"required":["max","current"]},"url":{"type":"string","description":"The URL that can be used to connect to the database"}},"required":["dsn","connection","url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/connection \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/connection';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/connection',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/connection\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/invitation/link/accept":{"post":{"description":"Accept invitation link","tags":["invitation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"invitationCode":{"type":"string"},"invitationId":{"type":"string"}},"required":["invitationCode","invitationId"]}}}},"responses":{"201":{"description":"Successful response, return the spaceId or baseId of the invitation link.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","nullable":true},"baseId":{"type":"string","nullable":true}},"required":["spaceId","baseId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/invitation/link/accept \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"invitationCode\":\"string\",\"invitationId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/invitation/link/accept';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"invitationCode\":\"string\",\"invitationId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/invitation/link/accept',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({invitationCode: 'string', invitationId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"invitationCode\\\":\\\"string\\\",\\\"invitationId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/invitation/link/accept\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/auth":{"post":{"description":"share view auth password","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":3}},"required":["password"]}}}},"responses":{"201":{"description":"Successfully authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/view/auth \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/auth';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/auth',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/auth\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view":{"get":{"description":"get share view info","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"share view info","content":{"application/json":{"schema":{"type":"object","properties":{"viewId":{"type":"string"},"tableId":{"type":"string"},"shareId":{"type":"string"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"view":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"description":"first 50 records"},"extra":{"type":"object","properties":{"groupPoints":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]},"description":"Group points for the view"},"plugin":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","name"]}}}},"required":["tableId","shareId","fields","records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/view \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/aggregations":{"get":{"description":"Get share view aggregations","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"object","properties":{"count":{"type":"array","items":{"type":"string"}},"empty":{"type":"array","items":{"type":"string"}},"filled":{"type":"array","items":{"type":"string"}},"unique":{"type":"array","items":{"type":"string"}},"max":{"type":"array","items":{"type":"string"}},"min":{"type":"array","items":{"type":"string"}},"sum":{"type":"array","items":{"type":"string"}},"average":{"type":"array","items":{"type":"string"}},"checked":{"type":"array","items":{"type":"string"}},"unChecked":{"type":"array","items":{"type":"string"}},"percentEmpty":{"type":"array","items":{"type":"string"}},"percentFilled":{"type":"array","items":{"type":"string"}},"percentUnique":{"type":"array","items":{"type":"string"}},"percentChecked":{"type":"array","items":{"type":"string"}},"percentUnChecked":{"type":"array","items":{"type":"string"}},"earliestDate":{"type":"array","items":{"type":"string"}},"latestDate":{"type":"array","items":{"type":"string"}},"dateRangeOfDays":{"type":"array","items":{"type":"string"}},"dateRangeOfMonths":{"type":"array","items":{"type":"string"}},"totalAttachmentSize":{"type":"array","items":{"type":"string"}}}},"required":false,"name":"field","in":"query"}],"responses":{"200":{"description":"Returns aggregations list of share view.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"createdBy":{"type":"string"},"lastModifiedBy":{"type":"string"},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."},"pluginId":{"type":"string"}},"required":["id","name","type","createdBy","createdTime","columnMeta"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/aggregations?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&field=SOME_OBJECT_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/row-count":{"get":{"description":"Get row count for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"Row count for the share view","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number"}},"required":["rowCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/row-count?ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/records":{"get":{"description":"Get records for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"required":false,"description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details","name":"fieldKeyType","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"Records for the share view","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]},"example":[{"id":"recXXXXXXX","fields":{"single line text":"text value"}}],"description":"Array of record objects "},"extra":{"type":"object","properties":{"groupPoints":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]},"description":"Group points for the view"},"allGroupHeaderRefs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"depth":{"type":"number","maximum":2,"minimum":0}},"required":["id","depth"]},"description":"All group header refs for the view, including collapsed group headers"},"searchHitIndex":{"type":"array","nullable":true,"items":{"type":"object","properties":{"recordId":{"type":"string"},"fieldId":{"type":"string"}},"required":["recordId","fieldId"]},"description":"The index of the records that match the search, highlight the records"}}}},"required":["records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/records?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/form-submit":{"post":{"description":"share form view submit new record","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"typecast":{"type":"boolean"}},"required":["fields"]}}}},"responses":{"201":{"description":"Successfully submit","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/view/form-submit \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/form-submit';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"fields\":{\"property1\":null,\"property2\":null},\"typecast\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/form-submit',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({fields: {property1: null, property2: null}, typecast: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"fields\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"typecast\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/form-submit\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/copy":{"get":{"description":"Copy operations in Share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained","name":"projection","in":"query"},{"schema":{"type":"string","description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","example":"[[0, 0], [1, 1]]"},"required":true,"description":"The parameter \"ranges\" is used to represent the coordinates [column, row][] of a selected range in a table. ","name":"ranges","in":"query"},{"schema":{"type":"string","enum":["rows","columns"],"description":"Types of non-contiguous selections","example":"columns"},"required":false,"description":"Types of non-contiguous selections","name":"type","in":"query"}],"responses":{"200":{"description":"Copy content","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"},"header":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","description":"The description of the field.","example":"this is a summary"},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name","color"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["AUTO_NUMBER()"]}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["CREATED_TIME()"]},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["expression","formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}}],"description":"The configuration options of the field. The structure of the field's options depend on the field's type."},"meta":{"anyOf":[{"type":"object","properties":{"persistedAsGeneratedColumn":{"type":"boolean","default":false,"description":"Whether this formula field is persisted as a generated column in the database. When true, the field value is computed and stored as a database generated column."}}},{"type":"object","properties":{"hasOrderColumn":{"type":"boolean","default":false,"description":"Whether this link field has an order column for maintaining insertion order. When true, the field uses a separate order column to preserve the order of linked records."}}}],"description":"The metadata of the field. The structure of the field's meta depend on the field's type. Currently formula and link fields have meta."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"lookupOptions":{"anyOf":[{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"field lookup options."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"unique":{"type":"boolean","description":"Whether this field is not unique."},"isPrimary":{"type":"boolean","description":"Whether this field is primary field."},"isComputed":{"type":"boolean","description":"Whether this field is computed field, you can not modify cellValue in computed field."},"isPending":{"type":"boolean","description":"Whether this field's calculation is pending."},"hasError":{"type":"boolean","description":"Whether This field has a configuration error. Check the fields referenced by this field's formula or configuration."},"cellValueType":{"type":"string","enum":["string","number","boolean","dateTime"],"description":"The cell value type of the field."},"isMultipleCellValue":{"type":"boolean","description":"Whether this field has multiple cell value."},"dbFieldType":{"type":"string","enum":["TEXT","INTEGER","DATETIME","REAL","BLOB","JSON","BOOLEAN"],"description":"The field type of database that cellValue really store."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"recordRead":{"type":"boolean","description":"Field record read permission. When set to false, reading records is denied. When true or not set, reading records is allowed."},"recordCreate":{"type":"boolean","description":"Field record create permission. When set to false, creating records is denied. When true or not set, creating records is allowed."}},"required":["id","name","type","options","cellValueType","dbFieldType","dbFieldName"]}}},"required":["content","header"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/copy?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&projection=SOME_ARRAY_VALUE&ranges=%5B%5B0%2C+0%5D%2C+%5B1%2C+1%5D%5D&type=columns\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/group-points":{"get":{"description":"Get group points for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Group points for the share view","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"number","enum":[0]},"depth":{"type":"number","maximum":2,"minimum":0},"value":{"nullable":true},"isCollapsed":{"type":"boolean"}},"required":["id","type","depth","isCollapsed"]},{"type":"object","properties":{"type":{"type":"number","enum":[1]},"count":{"type":"number"}},"required":["type","count"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/group-points?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/link-records":{"get":{"description":"In a view with a field selector, link the records list of the associated field selector to get the. Linking the desired ones inside the share view should fetch the ones that have already been selected.","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["candidate","selected"],"description":"Only used for plugin views"},"required":false,"description":"Only used for plugin views","name":"type","in":"query"}],"responses":{"200":{"description":"Link records list","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/link-records?take=100&skip=0&fieldId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/collaborators":{"get":{"description":"View collaborators in a view with a user field selector.","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"fieldId","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":false,"name":"type","in":"query"}],"responses":{"200":{"description":" view collaborators","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["userId","userName","email"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/collaborators?fieldId=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE&type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/search-count":{"get":{"description":"Get share view search result count with query","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"}],"responses":{"200":{"description":"Share view Search count with query","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/search-count?filter=SOME_STRING_VALUE&viewId=viwXXXXXXX&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/search-index":{"get":{"description":"Get share view record index with search query","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"}],"responses":{"200":{"description":"share view record index with search query","content":{"application/json":{"schema":{"type":"array","nullable":true,"items":{"type":"object","properties":{"index":{"type":"number"},"fieldId":{"type":"string"},"recordId":{"type":"string"}},"required":["index","fieldId","recordId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/search-index?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/calendar-daily-collection":{"get":{"description":"Get calendar daily collection for the share view","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDate","in":"query"},{"schema":{"type":"string"},"required":true,"name":"startDateFieldId","in":"query"},{"schema":{"type":"string"},"required":true,"name":"endDateFieldId","in":"query"}],"responses":{"200":{"description":"Calendar daily collection for the share view","content":{"application/json":{"schema":{"type":"object","properties":{"countMap":{"type":"object","additionalProperties":{"type":"number"}},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}}},"required":["countMap","records"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/view/calendar-daily-collection?filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&ignoreViewQuery=SOME_STRING_VALUE&startDate=SOME_STRING_VALUE&endDate=SOME_STRING_VALUE&startDateFieldId=SOME_STRING_VALUE&endDateFieldId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/view/record/{recordId}/{fieldId}/button-click":{"post":{"summary":"Button click","description":"Button click","tags":["share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"fieldId","in":"path"}],"responses":{"200":{"description":"Returns the clicked cell","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string"},"tableId":{"type":"string"},"fieldId":{"type":"string"},"record":{"type":"object","properties":{"id":{"type":"string","description":"The record id."},"name":{"type":"string","description":"primary field value"},"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."},"autoNumber":{"type":"number","description":"Auto number, a unique identifier for each record"},"createdTime":{"type":"string","description":"Created time, date ISO string (new Date().toISOString)."},"lastModifiedTime":{"type":"string","description":"Last modified time, date ISO string (new Date().toISOString)."},"createdBy":{"type":"string","description":"Created by, user name"},"lastModifiedBy":{"type":"string","description":"Last modified by, user name"},"permissions":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"description":"Permissions for the record"},"undeletable":{"type":"boolean","description":"Whether the record is undeletable"}},"required":["id","fields"]}},"required":["runId","tableId","fieldId","record"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/view/record/%7BrecordId%7D/%7BfieldId%7D/button-click\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications":{"get":{"description":"List a user notification","tags":["notification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["unread","read"]},"required":true,"name":"notifyStates","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Successful response, return user notification list.","content":{"application/json":{"schema":{"type":"object","properties":{"notifications":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"notifyIcon":{"anyOf":[{"type":"object","properties":{"iconUrl":{"type":"string"}},"required":["iconUrl"]},{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"userAvatarUrl":{"type":"string","nullable":true}},"required":["userId","userName"]}]},"notifyType":{"type":"string","enum":["system","collaboratorCellTag","collaboratorMultiRowTag","comment","exportBase"]},"url":{"type":"string"},"message":{"type":"string"},"messageI18n":{"type":"string","nullable":true},"isRead":{"type":"boolean"},"createdTime":{"type":"string"}},"required":["id","notifyIcon","notifyType","url","message","isRead","createdTime"]}},"nextCursor":{"type":"string","nullable":true}},"required":["notifications"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/notifications?notifyStates=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/{notificationId}/status":{"patch":{"description":"Patch notification status","tags":["notification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"notificationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isRead":{"type":"boolean"}},"required":["isRead"]}}}},"responses":{"200":{"description":"Returns successfully patch notification status"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/notifications/%7BnotificationId%7D/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"isRead\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/%7BnotificationId%7D/status';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"isRead\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/notifications/%7BnotificationId%7D/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({isRead: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isRead\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/notifications/%7BnotificationId%7D/status\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/read-all":{"patch":{"description":"mark all notifications as read","tags":["notification"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/notifications/read-all \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/read-all';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/notifications/read-all',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/notifications/read-all\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/notifications/unread-count":{"get":{"description":"User notification unread count","tags":["notification"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response, return user notification unread count.","content":{"application/json":{"schema":{"type":"object","properties":{"unreadCount":{"type":"integer","minimum":0}},"required":["unreadCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/notifications/unread-count \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/notifications/unread-count';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/notifications/unread-count',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/notifications/unread-count\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token":{"post":{"description":"Create access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"},"minItems":1},"spaceIds":{"type":"array","nullable":true,"items":{"type":"string"},"minItems":1},"baseIds":{"type":"array","nullable":true,"items":{"type":"string"},"minItems":1},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string","example":"2024-03-25"}},"required":["name","scopes","expiredTime"]}}}},"responses":{"201":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","nullable":true,"items":{"type":"string"}},"baseIds":{"type":"array","nullable":true,"items":{"type":"string"}},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string"},"token":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","name","scopes","expiredTime","token","createdTime","lastUsedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/access-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true,\"expiredTime\":\"2024-03-25\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true,\"expiredTime\":\"2024-03-25\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n scopes: ['string'],\n spaceIds: ['string'],\n baseIds: ['string'],\n hasFullAccess: true,\n expiredTime: '2024-03-25'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"scopes\\\":[\\\"string\\\"],\\\"spaceIds\\\":[\\\"string\\\"],\\\"baseIds\\\":[\\\"string\\\"],\\\"hasFullAccess\\\":true,\\\"expiredTime\\\":\\\"2024-03-25\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/access-token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"List access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","name","scopes","expiredTime","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/access-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/access-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token/{id}/refresh":{"post":{"description":"Refresh access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expiredTime":{"type":"string"}},"required":["expiredTime"]}}}},"responses":{"201":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"expiredTime":{"type":"string"},"token":{"type":"string"}},"required":["id","expiredTime","token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D/refresh \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"expiredTime\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D/refresh';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"expiredTime\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token/%7Bid%7D/refresh',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({expiredTime: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"expiredTime\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/access-token/%7Bid%7D/refresh\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/access-token/{id}":{"delete":{"description":"Delete access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Access token deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/access-token/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","nullable":true,"items":{"type":"string"}},"baseIds":{"type":"array","nullable":true,"items":{"type":"string"}},"hasFullAccess":{"type":"boolean"}},"required":["name","scopes"]}}}},"responses":{"200":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"hasFullAccess":{"type":"boolean"}},"required":["id","name","scopes"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"scopes\":[\"string\"],\"spaceIds\":[\"string\"],\"baseIds\":[\"string\"],\"hasFullAccess\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n scopes: ['string'],\n spaceIds: ['string'],\n baseIds: ['string'],\n hasFullAccess: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"scopes\\\":[\\\"string\\\"],\\\"spaceIds\\\":[\\\"string\\\"],\\\"baseIds\\\":[\\\"string\\\"],\\\"hasFullAccess\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/access-token/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get access token","tags":["access-token"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns access token.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"spaceIds":{"type":"array","items":{"type":"string"}},"baseIds":{"type":"array","items":{"type":"string"}},"hasFullAccess":{"type":"boolean"},"expiredTime":{"type":"string"},"createdTime":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","name","scopes","expiredTime","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/access-token/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/access-token/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/access-token/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/access-token/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/analyze":{"get":{"description":"Get a column info from analyze sheet","tags":["import"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"attachmentUrl","in":"query"},{"schema":{"type":"string","enum":["csv","excel"]},"required":true,"name":"fileType","in":"query"}],"responses":{"200":{"description":"Returns columnHeader analyze from file","content":{"application/json":{"schema":{"type":"object","properties":{"worksheets":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"name":{"type":"string"}},"required":["type","name"]}}},"required":["name","columns"]}}},"required":["worksheets"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/import/analyze?attachmentUrl=SOME_STRING_VALUE&fileType=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/{baseId}":{"post":{"description":"create table from file","tags":["import"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"worksheets":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"]},"name":{"type":"string"},"sourceColumnIndex":{"type":"number"}},"required":["type","name","sourceColumnIndex"]}},"useFirstRowAsHeader":{"type":"boolean"},"importData":{"type":"boolean"}},"required":["name","columns","useFirstRowAsHeader","importData"]}},"attachmentUrl":{"type":"string"},"fileType":{"type":"string","enum":["csv","excel"]},"notification":{"type":"boolean"},"tz":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["worksheets","attachmentUrl","fileType","tz"]}}}},"responses":{"201":{"description":"Returns data about a table without records","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of table."},"name":{"type":"string","description":"The name of the table."},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the base."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/import/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"worksheets\":{\"property1\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true},\"property2\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true}},\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"notification\":true,\"tz\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/%7BbaseId%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"worksheets\":{\"property1\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true},\"property2\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true}},\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"notification\":true,\"tz\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/import/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n worksheets: {\n property1: {\n name: 'string',\n columns: [{type: 'singleLineText', name: 'string', sourceColumnIndex: 0}],\n useFirstRowAsHeader: true,\n importData: true\n },\n property2: {\n name: 'string',\n columns: [{type: 'singleLineText', name: 'string', sourceColumnIndex: 0}],\n useFirstRowAsHeader: true,\n importData: true\n }\n },\n attachmentUrl: 'string',\n fileType: 'csv',\n notification: true,\n tz: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"worksheets\\\":{\\\"property1\\\":{\\\"name\\\":\\\"string\\\",\\\"columns\\\":[{\\\"type\\\":\\\"singleLineText\\\",\\\"name\\\":\\\"string\\\",\\\"sourceColumnIndex\\\":0}],\\\"useFirstRowAsHeader\\\":true,\\\"importData\\\":true},\\\"property2\\\":{\\\"name\\\":\\\"string\\\",\\\"columns\\\":[{\\\"type\\\":\\\"singleLineText\\\",\\\"name\\\":\\\"string\\\",\\\"sourceColumnIndex\\\":0}],\\\"useFirstRowAsHeader\\\":true,\\\"importData\\\":true}},\\\"attachmentUrl\\\":\\\"string\\\",\\\"fileType\\\":\\\"csv\\\",\\\"notification\\\":true,\\\"tz\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/import/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/import/{baseId}/{tableId}":{"patch":{"description":"import table inplace","tags":["import"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachmentUrl":{"type":"string"},"fileType":{"type":"string","enum":["csv","excel"]},"insertConfig":{"type":"object","properties":{"sourceWorkSheetKey":{"type":"string"},"excludeFirstRow":{"type":"boolean"},"sourceColumnMap":{"type":"object","additionalProperties":{"type":"number","nullable":true}}},"required":["sourceWorkSheetKey","excludeFirstRow","sourceColumnMap"]},"notification":{"type":"boolean"}},"required":["attachmentUrl","fileType","insertConfig"]}}}},"responses":{"200":{"description":"Successfully import table inplace"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/import/%7BbaseId%7D/%7BtableId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"insertConfig\":{\"sourceWorkSheetKey\":\"string\",\"excludeFirstRow\":true,\"sourceColumnMap\":{\"property1\":0,\"property2\":0}},\"notification\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/import/%7BbaseId%7D/%7BtableId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"insertConfig\":{\"sourceWorkSheetKey\":\"string\",\"excludeFirstRow\":true,\"sourceColumnMap\":{\"property1\":0,\"property2\":0}},\"notification\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/import/%7BbaseId%7D/%7BtableId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n attachmentUrl: 'string',\n fileType: 'csv',\n insertConfig: {\n sourceWorkSheetKey: 'string',\n excludeFirstRow: true,\n sourceColumnMap: {property1: 0, property2: 0}\n },\n notification: true\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachmentUrl\\\":\\\"string\\\",\\\"fileType\\\":\\\"csv\\\",\\\"insertConfig\\\":{\\\"sourceWorkSheetKey\\\":\\\"string\\\",\\\"excludeFirstRow\\\":true,\\\"sourceColumnMap\\\":{\\\"property1\\\":0,\\\"property2\\\":0}},\\\"notification\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/import/%7BbaseId%7D/%7BtableId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/export/{tableId}":{"get":{"description":"export csv from table","tags":["export"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","description":"When ignoreViewQuery is true, use this columnMeta to sort fields by order. Format: { fieldId: { order: number } }"},"required":false,"description":"When ignoreViewQuery is true, use this columnMeta to sort fields by order. Format: { fieldId: { order: number } }","name":"columnMeta","in":"query"}],"responses":{"200":{"description":"Download successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/export/%7BtableId%7D?viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filter=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&projection=SOME_ARRAY_VALUE&columnMeta=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin":{"delete":{"description":"Delete pin","tags":["pin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"required":true,"name":"type","in":"query"},{"schema":{"type":"string"},"required":true,"name":"id","in":"query"}],"responses":{"200":{"description":"Delete pin successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/pin?type=SOME_STRING_VALUE&id=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/":{"post":{"description":"Add pin","tags":["pin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"id":{"type":"string"}},"required":["type","id"]}}}},"responses":{"201":{"description":"Add pin successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/pin/ \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"space\",\"id\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"space\",\"id\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/pin/',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({type: 'space', id: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"space\\\",\\\"id\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/pin/\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/list":{"get":{"description":"Get pin list","tags":["pin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get pin list, include base pin","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"order":{"type":"number"},"name":{"type":"string"},"icon":{"type":"string"},"parentBaseId":{"type":"string"},"viewMeta":{"type":"object","properties":{"tableId":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"pluginLogo":{"type":"string"}},"required":["tableId","type"]}},"required":["id","type","order","name"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/pin/list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/pin/list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/pin/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/pin/order":{"put":{"description":"Update pin order","tags":["pin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"anchorId":{"type":"string"},"anchorType":{"type":"string","enum":["space","base","table","view","dashboard","workflow","app"]},"position":{"type":"string","enum":["before","after"]}},"required":["id","type","anchorId","anchorType","position"]}}}},"responses":{"200":{"description":"Update pin order successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/pin/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"id\":\"string\",\"type\":\"space\",\"anchorId\":\"string\",\"anchorType\":\"space\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"id\":\"string\",\"type\":\"space\",\"anchorId\":\"string\",\"anchorType\":\"space\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/pin/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n id: 'string',\n type: 'space',\n anchorId: 'string',\n anchorType: 'space',\n position: 'before'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"id\\\":\\\"string\\\",\\\"type\\\":\\\"space\\\",\\\"anchorId\\\":\\\"string\\\",\\\"anchorType\\\":\\\"space\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/pin/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/summary":{"get":{"description":"Retrieves a summary of subscription information for a space","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns a summary of subscription information about a space.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["spaceId","status","level"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription/summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/subscription/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/summary":{"get":{"description":"Retrieves a summary of subscription information across all spaces","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns a summary of subscription information for each space.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["spaceId","status","level"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/usage":{"get":{"description":"Get usage information for the space","tags":["usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns usage information for the space.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","limit"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/usage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/usage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/usage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/instance/usage":{"get":{"description":"Get usage information for the instance","tags":["usage"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns usage information for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","limit"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/instance/usage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/instance/usage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/instance/usage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/instance/usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/usage":{"get":{"description":"Get usage information for the base","tags":["usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns usage information for the base.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","limit"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/usage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/usage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/usage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/usage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}":{"get":{"description":"Get the OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"Returns the OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/client/%7BclientId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete an OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"OAuth application deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/oauth/client/%7BclientId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update an OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}},"responses":{"200":{"description":"Returns the updated OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"clientId\":\"string\",\"name\":\"string\",\"secrets\":[{\"id\":\"string\",\"secret\":\"string\",\"lastUsedTime\":\"string\"}],\"scopes\":[\"string\"],\"logo\":\"http://example.com\",\"homepage\":\"http://example.com\",\"redirectUris\":[\"http://example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"clientId\":\"string\",\"name\":\"string\",\"secrets\":[{\"id\":\"string\",\"secret\":\"string\",\"lastUsedTime\":\"string\"}],\"scopes\":[\"string\"],\"logo\":\"http://example.com\",\"homepage\":\"http://example.com\",\"redirectUris\":[\"http://example.com\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n clientId: 'string',\n name: 'string',\n secrets: [{id: 'string', secret: 'string', lastUsedTime: 'string'}],\n scopes: ['string'],\n logo: 'http://example.com',\n homepage: 'http://example.com',\n redirectUris: ['http://example.com']\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"clientId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"secrets\\\":[{\\\"id\\\":\\\"string\\\",\\\"secret\\\":\\\"string\\\",\\\"lastUsedTime\\\":\\\"string\\\"}],\\\"scopes\\\":[\\\"string\\\"],\\\"logo\\\":\\\"http://example.com\\\",\\\"homepage\\\":\\\"http://example.com\\\",\\\"redirectUris\\\":[\\\"http://example.com\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/oauth/client/%7BclientId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client":{"post":{"description":"Create a new OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"homepage":{"type":"string","format":"uri"},"logo":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["table|create","table|delete","table|export","table|import","table|read","table|update","table|trash_read","table|trash_update","table|trash_reset","view|create","view|delete","view|read","view|update","field|create","field|delete","field|read","field|update","record|comment","record|create","record|delete","record|read","record|update","automation|create","automation|delete","automation|read","automation|update","user|email_read","user|integrations"]}},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"},"minItems":1}},"required":["name","homepage","redirectUris"]}}}},"responses":{"201":{"description":"Returns the created OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret"]}},"scopes":{"type":"array","items":{"type":"string"}},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["clientId","name","homepage","redirectUris"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"homepage\":\"http://example.com\",\"logo\":\"string\",\"scopes\":[\"table|create\"],\"redirectUris\":[\"http://example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"homepage\":\"http://example.com\",\"logo\":\"string\",\"scopes\":[\"table|create\"],\"redirectUris\":[\"http://example.com\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n homepage: 'http://example.com',\n logo: 'string',\n scopes: ['table|create'],\n redirectUris: ['http://example.com']\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"homepage\\\":\\\"http://example.com\\\",\\\"logo\\\":\\\"string\\\",\\\"scopes\\\":[\\\"table|create\\\"],\\\"redirectUris\\\":[\\\"http://example.com\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/oauth/client\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get the list of OAuth applications","tags":["oauth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of OAuth applications","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"logo":{"type":"string","format":"uri"},"homepage":{"type":"string","format":"uri"}},"required":["clientId","name","homepage"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/client \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/client\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/revoke-token":{"post":{"tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"200":{"description":"Revoke token successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-token';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D/revoke-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/revoke-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/secret/{secretId}":{"delete":{"description":"Delete the OAuth secret","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"secretId","in":"path"}],"responses":{"200":{"description":"OAuth secret deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/oauth/client/%7BclientId%7D/secret/%7BsecretId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/secret":{"post":{"description":"Generate a new OAuth secret","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"201":{"description":"Returns the generated OAuth secret","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"secret":{"type":"string"},"maskedSecret":{"type":"string"},"lastUsedTime":{"type":"string"}},"required":["id","secret","maskedSecret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/secret';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D/secret',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/secret\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/decision/{transactionId}":{"get":{"description":"Get the OAuth application","tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"transactionId","in":"path"}],"responses":{"200":{"description":"Returns the OAuth application","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"homepage":{"type":"string","format":"uri"},"logo":{"type":"string","format":"uri"},"scopes":{"type":"array","items":{"type":"string"}}},"required":["name","homepage"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/decision/%7BtransactionId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/decision/%7BtransactionId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/decision/%7BtransactionId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/decision/%7BtransactionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/{clientId}/revoke-access":{"post":{"tags":["oauth"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"clientId","in":"path"}],"responses":{"201":{"description":"Revoke access permission successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-access \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/%7BclientId%7D/revoke-access';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/%7BclientId%7D/revoke-access',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/oauth/client/%7BclientId%7D/revoke-access\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/oauth/client/authorized/list":{"get":{"description":"Get the list of authorized applications","tags":["oauth"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of authorized applications","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"name":{"type":"string"},"homepage":{"type":"string","format":"uri"},"logo":{"type":"string","format":"uri"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"lastUsedTime":{"type":"string"},"createdUser":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"}},"required":["name","email"]}},"required":["clientId","name","homepage","createdUser"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/client/authorized/list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/client/authorized/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/oauth/client/authorized/list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/oauth/client/authorized/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/undo-redo/undo":{"post":{"description":"Undo the last operation","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"201":{"description":"Returns data about the undo operation.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["fulfilled","failed","empty"]},"errorMessage":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/undo \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/undo';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/undo-redo/undo',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/undo-redo/undo\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/undo-redo/redo":{"post":{"description":"Redo the last operation","tags":["record"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"201":{"description":"Returns data about the redo operation.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["fulfilled","failed","empty"]},"errorMessage":{"type":"string"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/redo \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/undo-redo/redo';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/undo-redo/redo',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/undo-redo/redo\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/{commentId}/reaction":{"post":{"description":"create record comment reaction","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reaction":{"type":"string"}},"required":["reaction"]}}}},"responses":{"201":{"description":"Successfully create comment reaction."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"reaction\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"reaction\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({reaction: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"reaction\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete record comment reaction","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reaction":{"type":"string"}},"required":["reaction"]}}}},"responses":{"200":{"description":"Successfully delete comment reaction."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"reaction\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction';\nconst options = {\n method: 'DELETE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"reaction\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({reaction: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"reaction\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"DELETE\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D/reaction\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/{commentId}":{"get":{"description":"Get record comment detail","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Returns the record's comment detail","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]},"reaction":{"type":"array","nullable":true,"items":{"type":"object","properties":{"reaction":{"type":"string"},"user":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]}}},"required":["reaction","user"]}},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"quoteId":{"type":"string"},"deletedTime":{"type":"string"}},"required":["id","content","createdBy","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"update record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}}},"required":["content"]}}}},"responses":{"200":{"description":"Successfully update comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n content: [{type: 'p', value: null, children: [{type: 'span', value: 'string'}]}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"content\\\":[{\\\"type\\\":\\\"p\\\",\\\"value\\\":null,\\\"children\\\":[{\\\"type\\\":\\\"span\\\",\\\"value\\\":\\\"string\\\"}]}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"commentId","in":"path"}],"responses":{"200":{"description":"Successfully delete comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/%7BcommentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/list":{"get":{"description":"Get record comment list","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":20,"example":20,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"required":false,"name":"includeCursor","in":"query"},{"schema":{"anyOf":[{"type":"string","enum":["forward"]},{"type":"string","enum":["backward"]}]},"required":false,"name":"direction","in":"query"}],"responses":{"200":{"description":"Returns the list of record's comment","content":{"application/json":{"schema":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}},"createdBy":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]},"reaction":{"type":"array","nullable":true,"items":{"type":"object","properties":{"reaction":{"type":"string"},"user":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name"]}}},"required":["reaction","user"]}},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"quoteId":{"type":"string"},"deletedTime":{"type":"string"}},"required":["id","content","createdBy","createdTime"]}},"nextCursor":{"type":"string","nullable":true}},"required":["comments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/list?take=20&cursor=SOME_STRING_VALUE&includeCursor=SOME_BOOLEAN_VALUE&direction=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/create":{"post":{"description":"create record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"quoteId":{"type":"string","nullable":true},"content":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["p"]},"value":{"nullable":true},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["span"]},"value":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["mention"]},"value":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string"}},"required":["type","value"]},{"type":"object","properties":{"type":{"type":"string","enum":["a"]},"value":{"nullable":true},"url":{"type":"string"},"title":{"type":"string"}},"required":["type","url","title"]}]}}},"required":["type","children"]},{"type":"object","properties":{"type":{"type":"string","enum":["img"]},"value":{"nullable":true},"path":{"type":"string"},"width":{"type":"number"},"url":{"type":"string"}},"required":["type","path"]}]}}},"required":["content"]}}}},"responses":{"201":{"description":"Successfully create comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/create \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"quoteId\":\"string\",\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/create';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"quoteId\":\"string\",\"content\":[{\"type\":\"p\",\"value\":null,\"children\":[{\"type\":\"span\",\"value\":\"string\"}]}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/create',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n quoteId: 'string',\n content: [{type: 'p', value: null, children: [{type: 'span', value: 'string'}]}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"quoteId\\\":\\\"string\\\",\\\"content\\\":[{\\\"type\\\":\\\"p\\\",\\\"value\\\":null,\\\"children\\\":[{\\\"type\\\":\\\"span\\\",\\\"value\\\":\\\"string\\\"}]}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/subscribe":{"post":{"description":"subscribe record comment's active","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"201":{"description":"Successfully subscribe record comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"unsubscribe record comment","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Successfully subscribe record comment."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"get record comment subscribe detail","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Successfully get record comment subscribe detail.","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"tableId":{"type":"string"},"recordId":{"type":"string"},"createdBy":{"type":"string"}},"required":["tableId","recordId","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/subscribe\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/attachment/{path}":{"get":{"description":"Get record comment attachment url","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Returns the record's comment attachment url","content":{"application/json":{"schema":{"type":"string"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/attachment/%7Bpath%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/count":{"get":{"description":"Get record comment counts by query","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"array","items":{"type":"string"},"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id"},"required":false,"description":"If you want to get only some fields, pass in this parameter, otherwise all visible fields will be obtained, The parameter value depends on the specified fieldKeyType to determine whether it is name or id","name":"projection","in":"query"},{"schema":{"type":"string","enum":["json","text"],"default":"json","description":"Define the return value formate, you can set it to text if you only need simple string value"},"required":false,"description":"Define the return value formate, you can set it to text if you only need simple string value","name":"cellFormat","in":"query"},{"schema":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"},"required":false,"description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details","name":"fieldKeyType","in":"query"},{"schema":{"type":"string","example":"viwXXXXXXX","description":"Set the view you want to fetch, default is first view. result will filter and sort by view options."},"required":false,"description":"Set the view you want to fetch, default is first view. result will filter and sort by view options.","name":"viewId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"boolean"}],"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc"},"required":false,"description":"When a viewId is specified, configure this to true will ignore the view's filter, sort, etc","name":"ignoreViewQuery","in":"query"},{"schema":{"type":"string","example":"{field} = 'Completed' AND {field} > 5","deprecated":true},"required":false,"name":"filterByTql","in":"query"},{"schema":{"type":"string","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"required":false,"description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters.","name":"filter","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1},{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"array","items":{"anyOf":[{"type":"string"},{"anyOf":[{"type":"string"},{"type":"boolean"}]}]},"minItems":3,"maxItems":3}],"default":["searchValue","fieldIdOrName",false],"description":"Search for records that match the specified field and value"},"required":false,"description":"Search for records that match the specified field and value","name":"search","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear."},"required":false,"description":"Filter out the records that can be selected by a given link cell from the relational table. For example, if the specified field is one to many or one to one relationship, recordId for which the field has already been selected will not appear.","name":"filterLinkCellCandidate","in":"query"},{"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2},{"type":"string"}],"example":["fldXXXXXXX","recXXXXXXX"],"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field"},"required":false,"description":"Filter out selected records based on this link cell from the relational table. Note that viewId, filter, and orderBy will not take effect in this case because selected records has it own order. Ignoring recordId gets all the selected records for the field","name":"filterLinkCellSelected","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter selected records by record ids"},"required":false,"description":"Filter selected records by record ids","name":"selectedRecordIds","in":"query"},{"schema":{"type":"string","description":"An array of sort objects that specifies how the records should be ordered."},"required":false,"description":"An array of sort objects that specifies how the records should be ordered.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"An array of group objects that specifies how the records should be grouped."},"required":false,"description":"An array of group objects that specifies how the records should be grouped.","name":"groupBy","in":"query"},{"schema":{"type":"string","description":"An array of group ids that specifies which groups are collapsed"},"required":false,"description":"An array of group ids that specifies which groups are collapsed","name":"collapsedGroupIds","in":"query"},{"schema":{"type":"string","example":"qry_xxxxxxxx","description":"When provided, other query parameters will be merged with the saved ones."},"required":false,"description":"When provided, other query parameters will be merged with the saved ones.","name":"queryId","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":100,"example":100,"description":"The record count you want to take, maximum is 1000"},"required":false,"description":"The record count you want to take, maximum is 1000","name":"take","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"default":0,"example":0,"description":"The records count you want to skip"},"required":false,"description":"The records count you want to skip","name":"skip","in":"query"}],"responses":{"200":{"description":"Returns the comment counts by query","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"recordId":{"type":"string"},"count":{"type":"number"}},"required":["recordId","count"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/count?projection=SOME_ARRAY_VALUE&cellFormat=SOME_STRING_VALUE&fieldKeyType=SOME_STRING_VALUE&viewId=viwXXXXXXX&ignoreViewQuery=SOME_STRING_VALUE&filterByTql=%7Bfield%7D+%3D+%27Completed%27+AND+%7Bfield%7D+%3E+5&filter=SOME_STRING_VALUE&search=SOME_ARRAY_VALUE&filterLinkCellCandidate=fldXXXXXXX&filterLinkCellCandidate=recXXXXXXX&filterLinkCellSelected=fldXXXXXXX&filterLinkCellSelected=recXXXXXXX&selectedRecordIds=SOME_ARRAY_VALUE&orderBy=SOME_STRING_VALUE&groupBy=SOME_STRING_VALUE&collapsedGroupIds=SOME_STRING_VALUE&queryId=qry_xxxxxxxx&take=100&skip=0\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/comment/{tableId}/{recordId}/count":{"get":{"description":"Get record comment count","tags":["comment"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns the comment count by query","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/count \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/comment/%7BtableId%7D/%7BrecordId%7D/count';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/comment/%7BtableId%7D/%7BrecordId%7D/count',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/comment/%7BtableId%7D/%7BrecordId%7D/count\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/me":{"get":{"description":"Get my organization","tags":["organization"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get my organization successfully","content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["id","name","isAdmin"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/me \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/me';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/me',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/me\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/department":{"get":{"tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"parentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"}],"responses":{"200":{"description":"Get department list successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}},"hasChildren":{"type":"boolean"}},"required":["id","name","hasChildren"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/department-user":{"get":{"tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"departmentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":0},"required":false,"name":"skip","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":50},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Get department users successfully","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}}},"required":["id","name"]}}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/api/{baseId}/ai/generate-stream":{"post":{"description":"Generate ai stream","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string"},"task":{"type":"string","enum":["coding","embedding","translation"],"description":"Quick model selection via predefined task type","example":"coding"},"modelKey":{"type":"string","description":"Specify an exact model configuration to use","example":"openai@gpt-4o@custom-name"}},"required":["prompt"]}}}},"responses":{"201":{"description":"Returns ai generate stream.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/api/%7BbaseId%7D/ai/generate-stream',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({prompt: 'string', task: 'coding', modelKey: 'openai@gpt-4o@custom-name'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"prompt\\\":\\\"string\\\",\\\"task\\\":\\\"coding\\\",\\\"modelKey\\\":\\\"openai@gpt-4o@custom-name\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/api/%7BbaseId%7D/ai/generate-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/{baseId}/ai/config":{"get":{"description":"Get the configuration of ai, including instance and space configuration","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the configuration of ai.","content":{"application/json":{"schema":{"type":"object","properties":{"llmProviders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["openai","anthropic","google","azure","cohere","mistral","deepseek","qwen","zhipu","lingyiwanwu","xai","togetherai","ollama","amazonBedrock","openRouter","openaiCompatible","aiGateway"]},"name":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"models":{"type":"string","default":""},"isInstance":{"type":"boolean"},"modelConfigs":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0},"isImageModel":{"type":"boolean"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"imageAbility":{"type":"object","properties":{"generation":{"type":"boolean"},"imageToImage":{"type":"boolean"}}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}}}}},"required":["type","name"]},"default":[]},"embeddingModel":{"type":"string"},"translationModel":{"type":"string"},"gatewayModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"enabled":{"type":"boolean","default":true},"capabilities":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"pricing":{"type":"object","properties":{"input":{"type":"string"},"output":{"type":"string"},"inputCacheRead":{"type":"string"},"inputCacheWrite":{"type":"string"},"reasoning":{"type":"string"},"image":{"type":"string"},"webSearch":{"type":"string"}}},"rates":{"type":"object","properties":{"inputRate":{"type":"number","minimum":0},"outputRate":{"type":"number","minimum":0},"cacheReadRate":{"type":"number","minimum":0},"cacheWriteRate":{"type":"number","minimum":0},"reasoningRate":{"type":"number","minimum":0},"imageRate":{"type":"number","minimum":0},"webSearchRate":{"type":"number","minimum":0}}},"isImageModel":{"type":"boolean"},"defaultFor":{"type":"array","items":{"type":"string","enum":["chatLg","chatMd","chatSm","aiFieldText","aiFieldImage"]}},"testedAt":{"type":"number"},"ownedBy":{"type":"string","enum":["alibaba","amazon","anthropic","arcee-ai","bfl","bytedance","cohere","deepseek","google","inception","kwaipilot","meituan","meta","minimax","mistral","moonshotai","morph","nvidia","openai","perplexity","prime-intellect","stealth","vercel","voyage","xai","xiaomi","zai"]},"modelType":{"type":"string","enum":["language","embedding","image"]},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}},"contextWindow":{"type":"number"},"maxTokens":{"type":"number"},"description":{"type":"string"}},"required":["id","label"]}},"capabilities":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}}},"aiGatewayApiKey":{"type":"string"},"aiGatewayBaseUrl":{"type":"string","format":"uri"},"attachmentTest":{"type":"object","properties":{"urlMode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"base64Mode":{"type":"object","properties":{"success":{"type":"boolean"},"errorMessage":{"type":"string"}},"required":["success"]},"testedAt":{"type":"string"},"testedOrigin":{"type":"string"},"recommendedMode":{"type":"string","enum":["url","base64"]}}},"attachmentTransferMode":{"type":"string","enum":["url","base64"],"default":"url"},"aiGatewayApiKeys":{"type":"array","items":{"type":"string"}},"vertexByokCredential":{"type":"object","properties":{"project":{"type":"string"},"location":{"type":"string"},"googleCredentials":{"type":"object","properties":{"privateKey":{"type":"string"},"clientEmail":{"type":"string"}},"required":["privateKey","clientEmail"]}},"required":["project","location","googleCredentials"]},"concurrencyGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"taskTypes":{"type":"array","items":{"type":"string","enum":["text","image"]},"default":[]},"keys":{"type":"array","items":{"type":"object","properties":{"apiKey":{"type":"string"},"status":{"type":"string","enum":["verified","untested","error"],"default":"untested"}},"required":["apiKey"]},"default":[]},"perKey":{"type":"number","minimum":1,"maximum":100,"default":5}},"required":["id","name"]}},"concurrencyPerKey":{"type":"number","minimum":1,"maximum":100},"modelDefinationMap":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"inputRate":{"type":"number","example":0.001,"description":"The number of credits spent using a prompt token"},"outputRate":{"type":"number","example":0.0025,"description":"The number of credits spent using a completion token"},"visionEnable":{"type":"boolean","description":"Whether to enable vision"},"audioEnable":{"type":"boolean","description":"Whether to enable audio"},"videoEnable":{"type":"boolean","description":"Whether to enable video"},"deepThinkEnable":{"type":"boolean","description":"Whether to enable deep think"}},"required":["inputRate","outputRate"]},{"type":"object","properties":{"usagePerUnit":{"type":"number","example":100,"description":"The number of credits spent for generating one image"},"outputType":{"type":"string","enum":["image","audio","video"]}},"required":["usagePerUnit","outputType"]}]}},"chatModel":{"type":"object","properties":{"lg":{"type":"string"},"md":{"type":"string"},"sm":{"type":"string"},"ability":{"type":"object","properties":{"image":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"pdf":{"anyOf":[{"type":"boolean"},{"type":"object","properties":{"url":{"type":"boolean"},"base64":{"type":"boolean"}}}]},"webSearch":{"type":"boolean"},"toolCall":{"type":"boolean"},"reasoning":{"type":"boolean"},"imageGeneration":{"type":"boolean"}}},"tags":{"type":"array","items":{"type":"string","enum":["reasoning","tool-use","vision","file-input","image-generation","implicit-caching"]}}}}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/%7BbaseId%7D/ai/config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/%7BbaseId%7D/ai/config';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/%7BbaseId%7D/ai/config',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/%7BbaseId%7D/ai/config\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/{baseId}/ai/disable-ai-actions":{"get":{"description":"Get the disable ai actions","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the configuration of ai.","content":{"application/json":{"schema":{"type":"object","properties":{"disableActions":{"type":"array","items":{"type":"string"}}},"required":["disableActions"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/%7BbaseId%7D/ai/disable-ai-actions \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/%7BbaseId%7D/ai/disable-ai-actions';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/%7BbaseId%7D/ai/disable-ai-actions',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/%7BbaseId%7D/ai/disable-ai-actions\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/integrity/base/{baseId}/link-check":{"get":{"description":"Check integrity of link fields in a base","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"}],"responses":{"200":{"description":"Returns integrity check results for the base","content":{"application/json":{"schema":{"type":"object","properties":{"hasIssues":{"type":"boolean"},"linkFieldIssues":{"type":"array","items":{"type":"object","properties":{"baseId":{"type":"string","description":"The base id of the link field with is cross-base"},"baseName":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ForeignTableNotFound","ForeignKeyNotFound","SelfKeyNotFound","SymmetricFieldNotFound","MissingRecordReference","InvalidLinkReference","ForeignKeyHostTableNotFound","ReferenceFieldNotFound","UniqueIndexNotFound","EmptyString"]},"message":{"type":"string"},"fieldId":{"type":"string"},"tableId":{"type":"string"}},"required":["type","message","fieldId"]}}},"required":["issues"]}}},"required":["hasIssues","linkFieldIssues"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/integrity/base/%7BbaseId%7D/link-check?tableId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/integrity/base/{baseId}/link-fix?tableId={tableId}":{"post":{"description":"Fix integrity of link fields in a base","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ForeignTableNotFound","ForeignKeyNotFound","SelfKeyNotFound","SymmetricFieldNotFound","MissingRecordReference","InvalidLinkReference","ForeignKeyHostTableNotFound","ReferenceFieldNotFound","UniqueIndexNotFound","EmptyString"]},"message":{"type":"string"},"fieldId":{"type":"string"},"tableId":{"type":"string"}},"required":["type","message","fieldId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/integrity/base/%7BbaseId%7D/link-fix?tableId=%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}":{"get":{"description":"Get a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"responses":{"200":{"description":"Plugin panel retrieved successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"responses":{"200":{"description":"Plugin panel deleted successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel":{"post":{"description":"Create a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Plugin panel created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get all plugin panels","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Plugin panels retrieved successfully.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-panel\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/rename":{"patch":{"description":"Rename a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Plugin panel updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/layout":{"patch":{"description":"Update the layout of a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["layout"]}}}},"responses":{"200":{"description":"The layout of the plugin panel was updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["id","layout"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({layout: [{pluginInstallId: 'string', x: 0, y: 0, w: 0, h: 0}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"layout\\\":[{\\\"pluginInstallId\\\":\\\"string\\\",\\\"x\\\":0,\\\"y\\\":0,\\\"w\\\":0,\\\"h\\\":0}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/layout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/install":{"post":{"description":"Install a plugin to a table plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["pluginId"]}}}},"responses":{"201":{"description":"Plugin installed successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"}},"required":["name","pluginId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/install\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{pluginInstallId}":{"delete":{"description":"Remove a plugin from a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin removed from plugin panel successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a plugin in plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginId","in":"path"}],"responses":{"200":{"description":"Returns data about the plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"name":{"type":"string"},"tableId":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["baseId","name","tableId","pluginId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin in a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Plugin renamed successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{pluginInstallId}/update-storage":{"patch":{"description":"Update storage of a plugin in a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginPanelId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Storage updated successfully.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"nullable":true}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BpluginInstallId%7D/update-storage\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/duplicate":{"post":{"description":"Duplicate a plugin panel","summary":"Duplicate a plugin panel","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated plugin panel info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-panel/{pluginPanelId}/plugin/{installedId}/duplicate":{"post":{"description":"Duplicate a dashboard installed plugin","summary":"Duplicate a dashboard installed plugin","tags":["plugin-panel"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns the duplicated dashboard info.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-panel/%7BpluginPanelId%7D/plugin/%7BinstalledId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}":{"get":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Returns data about the plugin context menu.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"tableId":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"positionId":{"type":"string"},"url":{"type":"string"},"config":{"type":"object","properties":{"contextMenu":{"type":"object","properties":{"width":{"anyOf":[{"type":"number"},{"type":"string"}]},"height":{"anyOf":[{"type":"number"},{"type":"string"}]},"x":{"anyOf":[{"type":"number"},{"type":"string"}]},"y":{"anyOf":[{"type":"number"},{"type":"string"}]},"frozenResize":{"type":"boolean"},"frozenDrag":{"type":"boolean"}}},"view":{"nullable":true},"dashboard":{"nullable":true},"panel":{"nullable":true}}}},"required":["name","tableId","pluginId","pluginInstallId","positionId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Remove a plugin context menu","tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin context menu removed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/install":{"post":{"description":"Install a plugin context menu","tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["pluginId"]}}}},"responses":{"201":{"description":"Plugin context menu installed successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"name":{"type":"string"},"order":{"type":"number"}},"required":["pluginInstallId","name","order"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/install \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/install';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/install',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/table/%7BtableId%7D/plugin-context-menu/install\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/move":{"put":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Plugin context menu moved successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin context menu","tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Plugin context menu renamed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/update-storage":{"put":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"storage":{"type":"object","additionalProperties":{"nullable":true}}}}}}},"responses":{"200":{"description":"Plugin context menu updated successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"tableId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["tableId","pluginInstallId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"storage\":{\"property1\":null,\"property2\":null}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"storage\":{\"property1\":null,\"property2\":null}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({storage: {property1: null, property2: null}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"storage\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/update-storage\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu":{"get":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"responses":{"200":{"description":"Returns a list of plugins","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"name":{"type":"string"},"pluginId":{"type":"string"},"logo":{"type":"string"},"order":{"type":"number"}},"required":["pluginInstallId","name","pluginId","logo","order"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-context-menu\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/plugin-context-menu/{pluginInstallId}/storage":{"get":{"tags":["plugin-context-menu"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin context menu storage retrieved successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"tableId":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["name","tableId","pluginId","pluginInstallId","storage"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/table/%7BtableId%7D/plugin-context-menu/%7BpluginInstallId%7D/storage\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/{token}":{"get":{"description":"Get unsubscribe information","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["automation","notify","system","verifyCode","resetPassword","invite","common","exportBase","collaboratorCellTag","collaboratorMultiRowTag","notifyMerge","waitlistInvite","automationSendEmailAction"]},"baseId":{"type":"string"},"email":{"type":"string"},"subscriptionStatus":{"type":"boolean"}},"required":["type","baseId","email"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/unsubscribe/%7Btoken%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/%7Btoken%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/%7Btoken%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/unsubscribe/%7Btoken%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Update subscription status","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"subscriptionStatus":{"type":"boolean"}},"required":["subscriptionStatus"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/unsubscribe/%7Btoken%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"subscriptionStatus\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/%7Btoken%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"subscriptionStatus\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/%7Btoken%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({subscriptionStatus: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"subscriptionStatus\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/unsubscribe/%7Btoken%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/list/{baseId}":{"get":{"description":"Get paginated unsubscribe list by baseId","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated unsubscribe list.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["empty"]},"sourceMetaData":{"nullable":true}},"required":["email","createdTime","sourceType","sourceMetaData"]},{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["legacy"]},"sourceMetaData":{"nullable":true}},"required":["email","createdTime","sourceType","sourceMetaData"]},{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["import"]},"sourceMetaData":{"nullable":true}},"required":["email","createdTime","sourceType","sourceMetaData"]},{"type":"object","properties":{"email":{"type":"string"},"createdTime":{"type":"string"},"sourceType":{"type":"string","enum":["emailLink"]},"sourceMetaData":{"type":"object","properties":{"type":{"type":"string","enum":["automationSendEmailAction"]},"workflow":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"action":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"}},"required":["id","type","category"]}},"required":["type","action"]}},"required":["email","createdTime","sourceType","sourceMetaData"]}]}},"hasMore":{"type":"boolean"},"pageSize":{"type":"number"}},"required":["data","hasMore","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/unsubscribe/list/%7BbaseId%7D?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/export-list/{baseId}":{"get":{"description":"Export unsubscribe list","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Export unsubscribe list successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/unsubscribe/export-list/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/export-list/%7BbaseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/export-list/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/unsubscribe/export-list/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/unsubscribe/import-list/{baseId}":{"post":{"description":"Import unsubscribe list","tags":["unsubscribe"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]}},"required":["notify"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/unsubscribe/import-list/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/unsubscribe/import-list/%7BbaseId%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/unsubscribe/import-list/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n notify: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n presignedUrl: 'string'\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/unsubscribe/import-list/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/{nodeId}":{"get":{"description":"Get nodes for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Nodes","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"icon":{"type":"string"}}}}}},"responses":{"200":{"description":"Updated node","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Deleted node Successfully","content":{"application/json":{"schema":{"type":"object","properties":{"resourceId":{"type":"string"},"resourceType":{"type":"string"},"permanent":{"type":"boolean"}},"required":["resourceId","resourceType"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/tree":{"get":{"description":"Get tree nodes for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Nodes","content":{"application/json":{"schema":{"type":"object","properties":{"nodes":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}},"maxFolderDepth":{"type":"number"}},"required":["nodes","maxFolderDepth"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/tree \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/tree';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/tree',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/node/tree\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/list":{"get":{"description":"Get list nodes of a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"List nodes","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/node/list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/{nodeId}/move":{"put":{"description":"Move or reorder a node","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"parentId":{"type":"string","nullable":true},"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}}}}}},"responses":{"200":{"description":"Updated node info","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"parentId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"parentId\":\"string\",\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({parentId: 'string', anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"parentId\\\":\\\"string\\\",\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/folder":{"post":{"description":"Create a folder node in base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Created folder node","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/folder',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node/folder\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node":{"post":{"description":"Create a hierarchical node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string","enum":["folder"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["table"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the base."},"description":{"type":"string","nullable":true,"description":"The description of the table."},"icon":{"type":"string","nullable":true,"format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","description":"Whether this field is not unique."},"notNull":{"type":"boolean","description":"Whether this field is not null."},"dbFieldName":{"type":"string","minLength":1,"pattern":"^\\w{0,63}$","description":"Field(column) name in backend database. Limitation: 1-63 characters, can only contain letters, numbers and underscore, case sensitive, cannot be duplicated with existing db field name in the table."},"isLookup":{"type":"boolean","description":"Whether this field is lookup field. witch means cellValue and [fieldType] is looked up from the linked table."},"isConditionalLookup":{"type":"boolean","description":"Whether this lookup field applies a conditional filter when resolving linked records."},"description":{"type":"string","nullable":true,"description":"The description of the field.","example":"this is a summary"},"lookupOptions":{"anyOf":[{"type":"object","properties":{"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"linkFieldId":{"type":"string","description":"The id of Linked record field to use for lookup"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["foreignTableId","lookupFieldId","linkFieldId"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","description":"The formula including fields referenced by their IDs. For example, LEFT(4, {Birthday}) input will be returned as LEFT(4, {fldXXX}) via API."},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."}},"required":["relationship","foreignTableId","lookupFieldId","fkHostTableName","selfKeyName","foreignKeyName"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"defaultValue":{"type":"string","nullable":true,"enum":["now"],"description":"Whether the new row is automatically filled with the current time, caveat: the defaultValue is just a flag, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"defaultValue":{"type":"boolean","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"showAs":{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"description":"Only be used in single line text field or formula / rollup field with cellValueType equals String and isMultipleCellValue is not true"},"defaultValue":{"type":"string","nullable":true}},"additionalProperties":false},{"type":"object","properties":{"icon":{"type":"string","enum":["star","moon","sun","zap","flame","heart","apple","thumb-up"]},"color":{"type":"string","enum":["yellowBright","redBright","tealBright"]},"max":{"type":"integer","maximum":10,"minimum":1}},"required":["icon","color","max"],"additionalProperties":false},{"type":"object","properties":{"isMultiple":{"type":"boolean","description":"Allow adding multiple users"},"shouldNotify":{"type":"boolean","description":"Notify users when their name is added to a cell"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","enum":["me"]}]}},{"nullable":true}]}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","description":"Button label"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"Button color"},"maxCount":{"type":"number","description":"Max count of button clicks"},"resetCount":{"type":"boolean","description":"Reset count"},"workflow":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Workflow ID"},"name":{"type":"string","description":"Workflow Name"},"isActive":{"type":"boolean","description":"Workflow is active"}},"description":"Workflow"},"confirm":{"type":"object","nullable":true,"properties":{"title":{"type":"string"},"description":{"type":"string"},"confirmText":{"type":"string"}},"description":"Confirm config before click"}},"required":["label","color"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"baseId":{"type":"string"},"foreignTableId":{"type":"string"},"lookupFieldId":{"type":"string"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"sort":{"type":"object","properties":{"fieldId":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000}},"required":["expression"],"additionalProperties":false},{"type":"object","properties":{"baseId":{"type":"string","description":"the base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field"},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"lookupFieldId":{"type":"string"}},"required":["relationship","foreignTableId"],"additionalProperties":false},{"type":"object","properties":{"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["name"]}},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"nullable":true}]},"preventAutoNewOptions":{"type":"boolean"}},"required":["choices"],"additionalProperties":false},{"type":"object","properties":{"formatting":{"oneOf":[{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["decimal"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["percent"]}},"required":["precision","type"],"additionalProperties":false},{"type":"object","properties":{"precision":{"type":"number","maximum":5,"minimum":0},"type":{"type":"string","enum":["currency"]},"symbol":{"type":"string"}},"required":["precision","type","symbol"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"Only be used in number field (number field or formula / rollup field with cellValueType equals Number"},"defaultValue":{"type":"number","nullable":true}},"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false},{"type":"object","properties":{"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"}},"required":["formatting"],"additionalProperties":false},{"type":"object","properties":{"expression":{"type":"string","enum":["LAST_MODIFIED_TIME()"],"default":"LAST_MODIFIED_TIME()"},"formatting":{"type":"object","properties":{"date":{"type":"string","description":"the display formatting of the date. you can use the following presets: M/D/YYYY, D/M/YYYY, YYYY/MM/DD, YYYY-MM-DD, YYYY-MM, MM-DD, YYYY, MM, DD"},"time":{"type":"string","enum":["HH:mm","hh:mm A","None"],"description":"the display formatting of the time. you can use the following presets: HH:mm, hh:mm A, None"},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"}},"required":["date","time","timeZone"],"description":"caveat: the formatting is just a formatter, it dose not effect the storing value of the record"},"trackedFieldIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":{"nullable":true}},{"type":"object","properties":{"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as url, email or phone in string field with a button to perform the corresponding action, start a phone call, send an email, or open a link in a new tab"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","ring"],"description":"can display as bar or ring in number field with single cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]},"showValue":{"type":"boolean","description":"whether to displays the specific value on the graph"},"maxValue":{"type":"number","description":"the value that represents a 100% maximum value, it does not represent a hard limit on the value"}},"required":["type","color","showValue","maxValue"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["bar","line"],"description":"can display as bar or line in number field with multiple cellValue value"},"color":{"type":"string","enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"]}},"required":["type","color"],"additionalProperties":false}],"description":"According to the results of expression parsing to determine different visual effects, where strings, numbers will provide customized \"show as\""},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"}},"additionalProperties":false}],"description":"The options of the field. The configuration of the field's options depend on the it's specific type."},"aiConfig":{"anyOf":[{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["summary"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["translation"]},"sourceFieldId":{"type":"string"},"targetLanguage":{"type":"string"}},"required":["modelKey","type","sourceFieldId","targetLanguage"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["improvement"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string","description":"The prompt to use for the AI operation, use {fieldId} to reference the field in the table, example: \"Summarize the content of {fieldId} into 100 words\"\n"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["classification"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["tag"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"},"onlyAllowConfiguredOptions":{"type":"boolean"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageGeneration"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"n":{"type":"number","minimum":1,"maximum":10},"size":{"type":"string","pattern":"^\\d+x\\d+$"},"quality":{"type":"string","enum":["low","medium","high"]},"aspectRatio":{"type":"string","pattern":"^\\d+:\\d+$"},"resolution":{"type":"string","enum":["1K","2K","4K"]},"type":{"type":"string","enum":["imageCustomization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["rating"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["extraction"]},"sourceFieldId":{"type":"string"}},"required":["modelKey","type","sourceFieldId"]},{"type":"object","properties":{"modelKey":{"type":"string"},"isAutoFill":{"type":"boolean","nullable":true},"attachPrompt":{"type":"string"},"type":{"type":"string","enum":["customization"]},"prompt":{"type":"string"}},"required":["modelKey","type","prompt"]},{"nullable":true}],"description":"The AI configuration of the field."},"id":{"type":"string","description":"The id of the field that start with \"fld\", followed by exactly 16 alphanumeric characters `/^fld[\\da-zA-Z]{16}$/`. It is sometimes useful to specify an id at creation time","example":"fldxxxxxxxxxxxxxxxx"},"order":{"type":"object","properties":{"viewId":{"type":"string","description":"You can only specify order in one view when create field"},"orderIndex":{"type":"number"}},"required":["viewId","orderIndex"]}},"required":["type"]},"description":"The fields of the table. If it is empty, 3 fields include SingleLineText, Number, SingleSelect will and 3 empty records be generated by default."},"views":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["grid","calendar","kanban","form","gallery","plugin"]},"description":{"type":"string"},"order":{"type":"number"},"options":{"anyOf":[{"type":"object","properties":{"rowHeight":{"type":"string","enum":["short","medium","tall","extraTall","autoFit"],"description":"The row height level of row in view"},"fieldNameDisplayLines":{"type":"number","minimum":1,"maximum":3,"description":"The field name display lines in view"},"frozenColumnCount":{"type":"number","minimum":0,"description":"The frozen column count in view. Deprecated: this field will be removed in a future release and may no longer take effect."},"frozenFieldId":{"type":"string","description":"Freeze to the right side of this field id in grid view"}},"additionalProperties":false},{"type":"object","properties":{"stackFieldId":{"type":"string","description":"The field id of the Kanban stack."},"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each Kanban card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit Kanban cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the Kanban cards."},"isEmptyStackHidden":{"type":"boolean","description":"If true, hides empty stacks in the Kanban."}},"additionalProperties":false},{"type":"object","properties":{"coverFieldId":{"type":"string","nullable":true,"description":"The cover field id is a designated attachment field id, the contents of which appear at the top of each gallery card."},"isCoverFit":{"type":"boolean","description":"If true, cover images are resized to fit gallery cards."},"isFieldNameHidden":{"type":"boolean","description":"If true, hides field name in the gallery cards."}},"additionalProperties":false},{"type":"object","properties":{"startDateFieldId":{"type":"string","nullable":true,"description":"The start date field id."},"endDateFieldId":{"type":"string","nullable":true,"description":"The end date field id."},"titleFieldId":{"type":"string","nullable":true,"description":"The title field id."},"colorConfig":{"type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["field","custom"]},"fieldId":{"type":"string","nullable":true,"description":"The color field id."},"color":{"type":"string","nullable":true,"enum":["blueLight2","blueLight1","blueBright","blue","blueDark1","cyanLight2","cyanLight1","cyanBright","cyan","cyanDark1","grayLight2","grayLight1","grayBright","gray","grayDark1","greenLight2","greenLight1","greenBright","green","greenDark1","orangeLight2","orangeLight1","orangeBright","orange","orangeDark1","pinkLight2","pinkLight1","pinkBright","pink","pinkDark1","purpleLight2","purpleLight1","purpleBright","purple","purpleDark1","redLight2","redLight1","redBright","red","redDark1","tealLight2","tealLight1","tealBright","teal","tealDark1","yellowLight2","yellowLight1","yellowBright","yellow","yellowDark1"],"description":"The color."}},"required":["type"]}},"additionalProperties":false},{"type":"object","properties":{"coverUrl":{"type":"string","description":"The cover url of the form"},"logoUrl":{"type":"string","description":"The logo url of the form"},"submitLabel":{"type":"string","description":"The submit button text of the form"}},"additionalProperties":false},{"type":"object","properties":{"pluginId":{"type":"string","description":"The plugin id"},"pluginInstallId":{"type":"string","description":"The plugin install id"},"pluginLogo":{"type":"string","description":"The plugin logo"}},"required":["pluginId","pluginInstallId","pluginLogo"],"additionalProperties":false}]},"sort":{"type":"object","nullable":true,"properties":{"sortObjs":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"manualSort":{"type":"boolean"}},"required":["sortObjs"]},"filter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"group":{"type":"array","nullable":true,"items":{"type":"object","properties":{"fieldId":{"type":"string","description":"The id of the field."},"order":{"type":"string","enum":["asc","desc"]}},"required":["fieldId","order"]}},"isLocked":{"type":"boolean"},"shareId":{"type":"string"},"enableShare":{"type":"boolean"},"shareMeta":{"type":"object","properties":{"allowCopy":{"type":"boolean"},"includeHiddenField":{"type":"boolean"},"password":{"type":"string","minLength":3},"includeRecords":{"type":"boolean"},"submit":{"type":"object","properties":{"allow":{"type":"boolean"},"requireLogin":{"type":"boolean"}}}}},"columnMeta":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"width":{"type":"number","description":"Column width in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."},"statisticFunc":{"type":"string","nullable":true,"enum":["count","empty","filled","unique","max","min","sum","average","checked","unChecked","percentEmpty","percentFilled","percentUnique","percentChecked","percentUnChecked","earliestDate","latestDate","dateRangeOfDays","dateRangeOfMonths","totalAttachmentSize"],"description":"Statistic function of the column in the view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the kanban view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the gallery view."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"visible":{"type":"boolean","description":"If column visible in the view."},"required":{"type":"boolean","description":"If column is required."}},"required":["order"],"additionalProperties":false},{"type":"object","properties":{"order":{"type":"number","description":"Order is a floating number, column will sort by it in the view."},"hidden":{"type":"boolean","description":"If column hidden in the view."}},"required":["order"],"additionalProperties":false}]},"description":"A mapping of view IDs to their corresponding column metadata."}},"required":["type"]},"description":"The views of the table. If it is empty, a grid view will be generated by default."},"records":{"type":"array","items":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":{"nullable":true},"description":"Objects with a fields key mapping fieldId or field name to value for that field."}},"required":["fields"]},"example":[{"fields":{"single line text":"text value"}}],"description":"The record data of the table. If it is empty, 3 empty records will be generated by default."},"order":{"type":"number"},"fieldKeyType":{"type":"string","enum":["id","name","dbFieldName"],"default":"name","description":"Define the key type of record.fields[key], You can click \"systemInfo\" in the field edit box to get fieldId or enter the table design screen with all the field details"}},"required":["resourceType","fields","views"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["dashboard"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string"}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["workflow"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["app"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]}]}}}},"responses":{"200":{"description":"Created node","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"resourceType\":\"folder\",\"parentId\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"resourceType\":\"folder\",\"parentId\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({resourceType: 'folder', parentId: 'string', name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"resourceType\\\":\\\"folder\\\",\\\"parentId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/{nodeId}/duplicate":{"post":{"description":"Duplicate a node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"includeRecords":{"type":"boolean"}},"required":["name","includeRecords"]},{"type":"object","properties":{"name":{"type":"string"}}},{"type":"object","properties":{"name":{"type":"string"}}}]}}}},"responses":{"200":{"description":"Duplicated node","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["table"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"defaultViewId":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["dashboard"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["workflow"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"isActive":{"type":"boolean","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["app"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"publishedVersion":{"type":"number","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]},{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string","nullable":true},"resourceId":{"type":"string"},"order":{"type":"number"},"defaultUrl":{"type":"string"},"parent":{"type":"object","nullable":true,"properties":{"id":{"type":"string"}},"required":["id"]},"children":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"order":{"type":"number"}},"required":["id","order"]}},"resourceType":{"type":"string","enum":["folder"]},"resourceMeta":{"type":"object","properties":{"name":{"type":"string"},"icon":{"type":"string","nullable":true}},"required":["name"]}},"required":["id","parentId","resourceId","order","resourceType","resourceMeta"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"includeRecords\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"includeRecords\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', includeRecords: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"includeRecords\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/{nodeId}/permanent":{"delete":{"description":"Permanent delete a node for a base","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Permanent deleted node Successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/folder/{folderId}":{"patch":{"description":"Rename a node folder","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"folderId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Updated node folder","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a node folder and move its children to parent","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"folderId","in":"path"}],"responses":{"200":{"description":"Deleted folder node (for client side cleanup)"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share":{"post":{"description":"Create a base share link","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"password":{"type":"string","nullable":true,"minLength":3}},"required":["nodeId"]}}}},"responses":{"201":{"description":"Returns the created base share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"nodeId\":\"string\",\"allowSave\":true,\"allowCopy\":true,\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"nodeId\":\"string\",\"allowSave\":true,\"allowCopy\":true,\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({nodeId: 'string', allowSave: true, allowCopy: true, password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"nodeId\\\":\\\"string\\\",\\\"allowSave\\\":true,\\\"allowCopy\\\":true,\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/share\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get all shared node IDs for a base","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns list of shared node IDs","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"nodeId":{"type":"string"}},"required":["nodeId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share/{shareId}":{"patch":{"description":"Update a base share link","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"},"password":{"type":"string","nullable":true,"minLength":3}}}}}},"responses":{"200":{"description":"Returns the updated base share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"allowSave\":true,\"allowCopy\":true,\"enabled\":true,\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"allowSave\":true,\"allowCopy\":true,\"enabled\":true,\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({allowSave: true, allowCopy: true, enabled: true, password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"allowSave\\\":true,\\\"allowCopy\\\":true,\\\"enabled\\\":true,\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a base share link","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Successfully deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share/{shareId}/refresh":{"post":{"description":"Refresh/regenerate a base share link ID","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the refreshed base share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D/refresh\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/base":{"get":{"description":"Get shared base information","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the shared base information","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareMeta":{"type":"object","properties":{"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true}},"required":["password","nodeId","allowSave","allowCopy"]},"defaultUrl":{"type":"string"}},"required":["baseId","shareMeta"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share/node/{nodeId}":{"get":{"description":"Get a base share by node ID","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Returns the base share for the specified node","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string"},"allowSave":{"type":"boolean","nullable":true},"allowCopy":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"}},"required":["baseId","shareId","password","nodeId","allowSave","allowCopy","enabled"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/share/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/base/auth":{"post":{"description":"Authenticate with password to access shared base","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","minLength":3}},"required":["password"]}}}},"responses":{"201":{"description":"Successfully authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/base/auth \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base/auth';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/base/auth',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/base/auth\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/base/copy":{"post":{"description":"Copy a shared base to a target space","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The target space ID to copy the base to"},"name":{"type":"string","description":"The name of the copied base"},"withRecords":{"type":"boolean","default":true,"description":"Whether to copy records"},"baseId":{"type":"string","description":"The target base ID to copy into. If provided, tables will be added to the existing base instead of creating a new one."}},"required":["spaceId"]}}}},"responses":{"200":{"description":"Returns the copied base","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/base/copy \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"name\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base/copy';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"name\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/base/copy',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', name: 'string', withRecords: true, baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/base/copy\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations":{"get":{"description":"Get user integration list","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["slack"],"description":"Filter by provider"},"required":false,"description":"Filter by provider","name":"provider","in":"query"}],"responses":{"200":{"description":"Returns the list of user integration.","content":{"application/json":{"schema":{"type":"object","properties":{"integrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"provider":{"type":"string","enum":["slack"]},"name":{"type":"string"},"lastUsedTime":{"type":"string"},"createdTime":{"type":"string"},"connectedTime":{"type":"string"},"lastModifiedTime":{"type":"string"},"hasSecret":{"type":"boolean"},"metadata":{"anyOf":[{"type":"object","properties":{"userInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"}},"required":["id","name","email"]},"teamInfo":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["userInfo","teamInfo"]}]}},"required":["id","userId","provider","name","createdTime","hasSecret","metadata"]}}},"required":["integrations"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/user-integrations?provider=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations?provider=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user-integrations?provider=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/user-integrations?provider=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/{integrationId}":{"delete":{"description":"Delete user integration","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/user-integrations/%7BintegrationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/%7BintegrationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user-integrations/%7BintegrationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/user-integrations/%7BintegrationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations/{integrationId}/name":{"put":{"description":"Update user integration name","tags":["user-integration"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"integrationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Updated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/user-integrations/%7BintegrationId%7D/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-integrations/%7BintegrationId%7D/name';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/user-integrations/%7BintegrationId%7D/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/user-integrations/%7BintegrationId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/action/{actionId}":{"get":{"description":"get a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets,
for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"update a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"}}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets,
for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/action":{"post":{"description":"Create a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"parentNodeId":{"type":"string","description":"witch node this the parent, if not provided, it is a root node"},"type":{"type":"string","enum":["sendEmail","createRecord","updateRecord","httpRequest","getRecords","aiGenerate","script"],"description":"type of action"}},"required":["parentNodeId","type"]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets,
for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"sendEmail\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"sendEmail\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n config: null,\n parentNodeId: 'string',\n type: 'sendEmail'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"parentNodeId\\\":\\\"string\\\",\\\"type\\\":\\\"sendEmail\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/action/{actionId}/duplicate":{"post":{"description":"duplicate a automation workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Successful duplicate","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string"},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields data in the record"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["createRecord"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"recordId":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"fields":{"type":"object","additionalProperties":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"description":"fields to update"},"_fieldsOrder":{"type":"array","items":{"type":"string"}}},"required":["tableId","recordId","fields"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["updateRecord"],"description":"This Action will activate when a record is updated in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"transportConfig":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"],"description":"The transporter to use for the email. If not provided, the default transporter will be used."},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"to":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"cc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"bcc":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"senderName":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"replyTo":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"subject":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"body":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"Utilize markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets,
for line breaks."}},"required":["to","subject","body"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["sendEmail"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"baseId":{"type":"string","description":"Once this parameter is passed in, the data will be requested as if it were from the creator themselves."},"tableId":{"type":"string","description":"select a table to watch"},"viewId":{"type":"string","description":"select a view to watch"},"filter":{"type":"object","description":"get records with filter conditions"},"skip":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"take":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["tableId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["getRecords"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"url":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"method":{"type":"string","enum":["get","post","head","patch","put","delete"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."},"body":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"anyOf":[{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]}]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"nullable":true}]}},"required":["key","value"]}},{"nullable":true}]},"contentType":{"type":"string","enum":["multipart/form-data","application/x-www-form-urlencoded","text/plain","application/json"]},"headers":{"type":"array","items":{"type":"object","properties":{"key":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]},"value":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["key","value"]}}},"required":["url","method"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["httpRequest"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"prompt":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}],"description":"The prompt to be used in the LLM model."},"model":{"type":"string","description":"The model to be used in the LLM model."},"temperature":{"type":"number","minimum":0,"maximum":1,"description":"The temperature of the LLM model."},"attachments":{"type":"array","items":{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},"description":"The attachments to be used in the LLM model."},"outputType":{"type":"string","enum":["object","string"]},"loopKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to run the action for each item in the array."},"arrayKey":{"type":"object","nullable":true,"properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"],"description":"An array variable to generate the JSON body array for the request."}},"required":["prompt"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["aiGenerate"],"description":"This Action will activate when a record is created in a table."}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"code":{"type":"string","description":"The script code to execute in the sandbox."},"dependencies":{"type":"array","nullable":true,"items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"Array of npm dependencies required for the script execution."},"fileToken":{"type":"string","nullable":true,"description":"The compiled code file token."},"codeHash":{"type":"string","nullable":true,"description":"Hash of the source code and dependencies for caching compilation results."},"version":{"type":"number","description":"Script version, starts from 0."},"integrations":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["slack"]}},"required":["id","provider"]},"description":"Array of integrations required for the script execution."},"flowChart":{"type":"object","nullable":true,"properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["start","end","step","condition","loop","tryCatch"]},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","type","label"]}},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"},"label":{"type":"string"},"type":{"type":"string","enum":["default","true","false","error","loop"]}},"required":["source","target"]}},"codeHash":{"type":"string"}},"required":["nodes","edges","codeHash"],"description":"Flowchart data generated by AI analysis of the script"}},"required":["code"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["action"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["script"],"description":"This action will execute script in a secure sandbox."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/action/{actionId}/script-input":{"get":{"description":"Get script integrations for a workflow action","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Script integrations data","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"integrations":{"type":"object","additionalProperties":{"nullable":true}},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/action/%7BactionId%7D/script-input\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/logic/{logicId}":{"get":{"description":"get a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"logicId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"conditions":{"type":"object"}},"required":["conditions"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"fact":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["fact"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["Repeat"],"description":"Actions in this group will repeat for each item in the input list."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"update a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"}}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"conditions":{"type":"object"}},"required":["conditions"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"fact":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["fact"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["Repeat"],"description":"Actions in this group will repeat for each item in the input list."}},"required":["config","id","category","type"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic/%7BlogicId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/logic":{"post":{"description":"Create a automation workflow logic","tags":["automation"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"parentNodeId":{"type":"string","description":"witch node this the parent, if not provided, it is a root node"},"type":{"type":"string","enum":["condition","Repeat"],"description":"type of logic"}},"required":["parentNodeId","type"]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"type":"object","properties":{"logic":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"conditions":{"type":"object"}},"required":["conditions"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["condition"],"description":"Condition logic"}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"type":"object","properties":{"fact":{"oneOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["array"]},"nodes":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["literal"]},"value":{"nullable":true,"description":"Literal value"}},"required":["resolvable","type"]},{"type":"object","properties":{"resolvable":{"type":"boolean","enum":[true],"description":"Need be resolved to static values before running"},"type":{"type":"string","enum":["fact"]},"path":{"type":"string","description":"json-path syntax"},"keyStack":{"type":"array","items":{"type":"string"},"description":"save select stack"},"params":{"type":"object","properties":{"pipes":{"type":"array","items":{"type":"string","enum":["uppercase","lowercase","capitalize","trim","length","toString","jsonStringify","encodeUrlComponent"]},"description":"Pipe functions to transform the fact value"}}},"fact":{"type":"string","description":"Fact name, actionId or triggerId"}},"required":["resolvable","type","fact"]}]},"description":"Array of literal and fact nodes, all value will be stringify and join together"}},"required":["resolvable","type","nodes"]},{"nullable":true}]}},"required":["fact"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["logic"]},"testResult":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"],"description":"action test result"},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["Repeat"],"description":"Actions in this group will repeat for each item in the input list."}},"required":["config","id","category","type"]}]},"controls":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"config":{"type":"object","properties":{"sourceNodeId":{"type":"string"}},"required":["sourceNodeId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["control"]},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["conditionEnd","triggerEnd","repeatEnd"]}},"required":["config","id","category","type"]},{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"config":{"type":"object","properties":{"truthy":{"type":"boolean"},"sourceNodeId":{"type":"string"}},"required":["truthy","sourceNodeId"]},"id":{"type":"string","description":"node id"},"category":{"type":"string","enum":["control"]},"outputVariables":{"type":"object","description":"output variables"},"inputVariables":{"type":"object","description":"input variables"},"createdTime":{"type":"string","nullable":true,"description":"created time"},"lastModifiedTime":{"type":"string","nullable":true,"description":"last modified time"},"type":{"type":"string","enum":["conditionBranch"],"description":"all logic category is actually a group, so they need a node for end mark"}},"required":["config","id","category","type"]}]},"description":"workflow control nodes, contains the logic branch and the end node"}},"required":["logic","controls"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"condition\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"parentNodeId\":\"string\",\"type\":\"condition\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n config: null,\n parentNodeId: 'string',\n type: 'condition'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"parentNodeId\\\":\\\"string\\\",\\\"type\\\":\\\"condition\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/logic\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/trigger/{triggerId}":{"get":{"description":"get a automation workflow trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"triggerId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"update a automation workflow trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"triggerId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"}}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"type":"object"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/trigger":{"post":{"description":"Create a automation workflow trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"type":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"],"description":"type of trigger"}},"required":["type"]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"type":"object"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', description: 'string', config: null, type: 'recordCreated'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"type\\\":\\\"recordCreated\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/trigger/{triggerId}/generate-webhook-token":{"post":{"description":"Generate a new webhook token for the trigger","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"triggerId","in":"path"}],"responses":{"200":{"description":"Successfully generated webhook token","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"secret":{"type":"string"}},"required":["token","secret"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/trigger/%7BtriggerId%7D/generate-webhook-token\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}":{"get":{"description":"get a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the base id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]},"description":"edges of the nodes"},"nodes":{"type":"array","items":{"type":"object"},"description":"nodes list include trigger and actions"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"activeUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"],"description":"active user of the workflow"}},"required":["id","baseId","edges","nodes","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"update a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"trigger":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"type":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"],"description":"type of trigger"}},"required":["type"]}}}}}},"responses":{"200":{"description":"Successful updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n trigger: {name: 'string', description: 'string', config: null, type: 'recordCreated'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"trigger\\\":{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"type\\\":\\\"recordCreated\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"delete a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/active-snapshot":{"get":{"description":"Get the currently active (published) snapshot of a workflow. Returns the version that is actually running, as opposed to the draft version returned by getWorkflow.","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"The active snapshot of the workflow","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the base id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]},"description":"edges of the nodes"},"nodes":{"type":"array","items":{"type":"object"},"description":"nodes list include trigger and actions"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"activeUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"],"description":"active user of the workflow"}},"required":["id","baseId","edges","nodes","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active-snapshot\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow":{"get":{"description":"get automation workflow list in base","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"onlyFirst","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"category":{"type":"string","enum":["logic","trigger","action","control"]}},"required":["id","type","category"]}}},"required":["id","createdBy","createdTime","nodes"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow?onlyFirst=SOME_BOOLEAN_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"trigger":{"type":"object","properties":{"name":{"type":"string","description":"name of the node"},"description":{"type":"string","description":"description of the node"},"config":{"nullable":true,"description":"node configuration"},"type":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"],"description":"type of trigger"}},"required":["type"]}}}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the base id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","description":"description of the workflow"},"hasDraft":{"type":"boolean","description":"has draft of the workflow"},"isActive":{"type":"boolean","description":"is active of the workflow"},"edges":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"target":{"type":"string"}},"required":["source","target"]},"description":"edges of the nodes"},"nodes":{"type":"array","items":{"type":"object"},"description":"nodes list include trigger and actions"},"createdBy":{"type":"string","description":"created by user id"},"createdTime":{"type":"string","description":"created time of the workflow"},"lastModifiedTime":{"type":"string","description":"last modified time of the workflow"},"lastModifiedBy":{"type":"string","description":"last modified by user id"},"activeUser":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"],"description":"active user of the workflow"}},"required":["id","baseId","edges","nodes","createdBy","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"trigger\":{\"name\":\"string\",\"description\":\"string\",\"config\":null,\"type\":\"recordCreated\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n trigger: {name: 'string', description: 'string', config: null, type: 'recordCreated'}\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"trigger\\\":{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"config\\\":null,\\\"type\\\":\\\"recordCreated\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/active":{"put":{"description":"active or inactive a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["activate","deactivate","discard"],"description":"Method to update the workflow, activate: activate the workflow and apply any draft if exist, deactivate: deactivate the workflow, abort: abort the draft back to the last active workflow."}},"required":["method"]}}}},"responses":{"200":{"description":"Successful updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"method\":\"activate\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"method\":\"activate\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({method: 'activate'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"method\\\":\\\"activate\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/active\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/run/{runId}":{"get":{"description":"get automation workflow run list","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"runId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"id of the step"},"status":{"type":"string","enum":["success","failed","running","canceled","pending"]},"nodeId":{"type":"string","description":"id of the node"},"nodeType":{"type":"string","description":"type of the node"},"nodeName":{"type":"string","description":"node name"},"nodeCategory":{"type":"string","description":"node category"},"createdTime":{"type":"string","description":"time when the step was created"},"testedTime":{"type":"string","description":"time when the node was tested"},"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"}},"required":["id","status","nodeId","nodeType","nodeCategory","createdTime"]},"description":"workflow run history"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/%7BrunId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/run":{"get":{"description":"get automation workflow run history list","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"number","nullable":true,"description":"skip number"},"required":false,"description":"skip number","name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"description":"take number"},"required":false,"description":"take number","name":"take","in":"query"},{"schema":{"type":"string","enum":["success","failed","running","canceled","pending"],"description":"filter by status"},"required":false,"description":"filter by status","name":"status","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"rowCount":{"type":"number","description":"total number of the runs"},"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"id of the action run"},"status":{"type":"string","enum":["success","failed","running","canceled","pending"]},"errorMsg":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"],"description":"error message of the workflow run"},"spent":{"type":"number","description":"spent of the workflow run"},"createdTime":{"type":"string","description":"started time of the workflow run"}},"required":["id","status","createdTime"]},"description":"workflow run history"}},"required":["rowCount","runs"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/run/summary":{"get":{"description":"get automation workflow run summary statistics","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"totalCount":{"type":"number","description":"total number of runs"},"statusStats":{"type":"object","properties":{"success":{"type":"number"},"failed":{"type":"number"},"running":{"type":"number"},"pending":{"type":"number"},"canceled":{"type":"number"}},"required":["success","failed","running","pending","canceled"],"description":"count of runs by status"},"avgSpent":{"type":"number","description":"average runtime in milliseconds"}},"required":["totalCount","statusStats","avgSpent"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/run/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/test/{nodeId}":{"post":{"description":"test a automation workflow node","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordId":{"type":"string","description":"the record id to test"},"sideEffect":{"type":"boolean","description":"whether to test with side effect"},"withDependency":{"type":"boolean","description":"whether to test with dependency"}},"additionalProperties":{"nullable":true}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"type":"object","properties":{"spent":{"type":"number","description":"spent time"},"inputRaw":{"nullable":true},"outputRaw":{"nullable":true},"inputVariables":{"type":"object","description":"The variables snapshot when executed"},"outputVariables":{"type":"object","description":"The variables snapshot when executed"},"errorMsg":{"type":"string"},"createdTime":{"type":"string"}},"required":["createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n recordId: 'string',\n sideEffect: true,\n withDependency: true,\n property1: null,\n property2: null\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordId\\\":\\\"string\\\",\\\"sideEffect\\\":true,\\\"withDependency\\\":true,\\\"property1\\\":null,\\\"property2\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test/%7BnodeId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/test-all":{"post":{"description":"test a automation workflow all","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recordId":{"type":"string","description":"the record id to test"},"sideEffect":{"type":"boolean","description":"whether to test with side effect"},"withDependency":{"type":"boolean","description":"whether to test with dependency"}},"additionalProperties":{"nullable":true}}}}},"responses":{"200":{"description":"Successful updated","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"recordId\":\"string\",\"sideEffect\":true,\"withDependency\":true,\"property1\":null,\"property2\":null}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n recordId: 'string',\n sideEffect: true,\n withDependency: true,\n property1: null,\n property2: null\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"recordId\\\":\\\"string\\\",\\\"sideEffect\\\":true,\\\"withDependency\\\":true,\\\"property1\\\":null,\\\"property2\\\":null}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/test-all\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/order":{"put":{"description":"Update workflow order","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{tableId}/filter-link-records":{"post":{"description":"get automation workflow list in base","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"nullable":true}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data null"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: 'null'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"null\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BtableId%7D/filter-link-records\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/duplicate":{"post":{"description":"duplicate a automation workflow","tags":["automation"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful duplicate"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/duplicate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{workflowId}/permanent":{"delete":{"summary":"Permanently delete workflow","description":"Permanently delete a workflow and all its data. This action cannot be undone.","tags":["automation"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Workflow permanently deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix/status":{"patch":{"description":"Enable authority","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"enabledTime":{"type":"string"}},"required":["id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"enabled\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/status';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"enabled\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({enabled: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"enabled\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix/status\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix":{"get":{"description":"Get authority matrix","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"defaultRole":{"type":"string"},"enabledTime":{"type":"string"},"adminUsers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}}},"required":["id","baseId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update authority matrix","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"defaultRole":{"type":"string","nullable":true}},"required":["defaultRole"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"defaultRole":{"type":"string"},"enabledTime":{"type":"string"}},"required":["id","baseId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"defaultRole\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"defaultRole\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({defaultRole: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"defaultRole\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/authority-matrix\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix/admin-user":{"patch":{"description":"Update admin user","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","nullable":true,"items":{"type":"string"}}},"required":["userIds"]}}}},"responses":{"200":{"description":"Successful response"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/admin-user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix/admin-user';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"userIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix/admin-user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix/admin-user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role":{"post":{"description":"Add authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"tables":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"enabledViewIds":{"type":"array","items":{"type":"string"}},"enabled":{"type":"boolean"}},"required":["tableId"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabled":{"type":"boolean"}},"required":["nodeType","nodeId"]}}},"required":["name"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"createdTime":{"type":"string"},"enabledTime":{"type":"string"}},"required":["authorityMatrixRoleId","tableId","createdTime"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixRoleId":{"type":"string"},"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabledTime":{"type":"string"},"createdTime":{"type":"string"}},"required":["authorityMatrixRoleId","nodeType","nodeId"]}}},"required":["id","name","baseId","createdTime","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"enabled\":true,\"tables\":[{\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabledViewIds\":[\"string\"],\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"enabled\":true,\"tables\":[{\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabledViewIds\":[\"string\"],\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n enabled: true,\n tables: [\n {\n tableId: 'string',\n disabledActions: ['string'],\n fieldRecordPermission: [{fieldId: 'string', disabledActions: ['string']}],\n recordFilter: {},\n enabledViewIds: ['string'],\n enabled: true\n }\n ],\n nodes: [{nodeType: 'workflow', nodeId: 'string', enabled: true}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"enabled\\\":true,\\\"tables\\\":[{\\\"tableId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"],\\\"fieldRecordPermission\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"]}],\\\"recordFilter\\\":{},\\\"enabledViewIds\\\":[\\\"string\\\"],\\\"enabled\\\":true}],\\\"nodes\\\":[{\\\"nodeType\\\":\\\"workflow\\\",\\\"nodeId\\\":\\\"string\\\",\\\"enabled\\\":true}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/authority-matrix-role\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get authority matrix role list","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name","baseId","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix-role\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}":{"delete":{"description":"Delete authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"responses":{"200":{"description":"Successful response"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"enabled":{"type":"boolean"}},"required":["authorityMatrixRoleId","tableId"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabled":{"type":"boolean"}},"required":["nodeType","nodeId"]}}},"required":["name"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"createdTime":{"type":"string"},"enabledTime":{"type":"string"}},"required":["authorityMatrixRoleId","tableId","createdTime"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixRoleId":{"type":"string"},"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabledTime":{"type":"string"},"createdTime":{"type":"string"}},"required":["authorityMatrixRoleId","nodeType","nodeId"]}}},"required":["id","name","baseId","createdTime","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"description\":\"string\",\"tables\":[{\"authorityMatrixRoleId\":\"string\",\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"enabledViewIds\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"description\":\"string\",\"tables\":[{\"authorityMatrixRoleId\":\"string\",\"tableId\":\"string\",\"disabledActions\":[\"string\"],\"enabledViewIds\":[\"string\"],\"fieldRecordPermission\":[{\"fieldId\":\"string\",\"disabledActions\":[\"string\"]}],\"recordFilter\":{},\"enabled\":true}],\"nodes\":[{\"nodeType\":\"workflow\",\"nodeId\":\"string\",\"enabled\":true}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n name: 'string',\n description: 'string',\n tables: [\n {\n authorityMatrixRoleId: 'string',\n tableId: 'string',\n disabledActions: ['string'],\n enabledViewIds: ['string'],\n fieldRecordPermission: [{fieldId: 'string', disabledActions: ['string']}],\n recordFilter: {},\n enabled: true\n }\n ],\n nodes: [{nodeType: 'workflow', nodeId: 'string', enabled: true}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"description\\\":\\\"string\\\",\\\"tables\\\":[{\\\"authorityMatrixRoleId\\\":\\\"string\\\",\\\"tableId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"],\\\"enabledViewIds\\\":[\\\"string\\\"],\\\"fieldRecordPermission\\\":[{\\\"fieldId\\\":\\\"string\\\",\\\"disabledActions\\\":[\\\"string\\\"]}],\\\"recordFilter\\\":{},\\\"enabled\\\":true}],\\\"nodes\\\":[{\\\"nodeType\\\":\\\"workflow\\\",\\\"nodeId\\\":\\\"string\\\",\\\"enabled\\\":true}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"baseId":{"type":"string"},"createdTime":{"type":"string"},"enabledTime":{"type":"string"},"tables":{"type":"array","items":{"type":"object","properties":{"authorityMatrixRoleId":{"type":"string"},"tableId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"}},"enabledViewIds":{"type":"array","items":{"type":"string"}},"fieldRecordPermission":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"string"},"disabledActions":{"type":"array","items":{"type":"string"},"description":"Field operations, encompassing reading, editing, and deleting, are presently disabled."}},"required":["fieldId"]}},"recordFilter":{"type":"object","description":"A filter object for complex query conditions based on fields, operators, and values. Use our visual query builder at https://app.teable.ai/developer/tool/query-builder to build filters."},"createdTime":{"type":"string"},"enabledTime":{"type":"string"}},"required":["authorityMatrixRoleId","tableId","createdTime"]}},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixRoleId":{"type":"string"},"nodeType":{"type":"string","enum":["workflow","app"]},"nodeId":{"type":"string"},"enabledTime":{"type":"string"},"createdTime":{"type":"string"}},"required":["authorityMatrixRoleId","nodeType","nodeId"]}},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name","baseId","createdTime","tables"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/status":{"patch":{"description":"Update authority matrix role status","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRole","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixId":{"type":"string"},"enabledTime":{"type":"string"}},"required":["id","authorityMatrixId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"enabled\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"enabled\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({enabled: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"enabled\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/status\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/name":{"patch":{"description":"Update authority matrix role name","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRole","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/description":{"patch":{"description":"Update authority matrix role description","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRole","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"description":{"type":"string"}},"required":["id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"description\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"description\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({description: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"description\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/description\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/user":{"patch":{"description":"Update authority matrix role user","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string"}},"departmentIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"authorityMatrixId":{"type":"string"},"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"}},"required":["id","name","email"]}},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","authorityMatrixId","users","departments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"userIds\":[\"string\"],\"departmentIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"userIds\":[\"string\"],\"departmentIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({userIds: ['string'], departmentIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userIds\\\":[\\\"string\\\"],\\\"departmentIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role/{authorityMatrixRoleId}/duplicate":{"post":{"description":"Duplicate authority matrix role","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"includeUsers":{"type":"boolean"},"includeDepartments":{"type":"boolean"}}}}}},"responses":{"201":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"authorityMatrixRoleId":{"type":"string"}},"required":["baseId","authorityMatrixRoleId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"includeUsers\":true,\"includeDepartments\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"includeUsers\":true,\"includeDepartments\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({includeUsers: true, includeDepartments: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"includeUsers\\\":true,\\\"includeDepartments\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/authority-matrix-role/%7BauthorityMatrixRoleId%7D/duplicate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/authority-matrix-role-table/{tableId}/filter-link-records":{"get":{"description":"Get authority matrix table link records","tags":["authority-matrix"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"authorityMatrixRoleId","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tableId":{"type":"string"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"}},"required":["id"]}}},"required":["tableId","records"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/authority-matrix-role-table/%7BtableId%7D/filter-link-records?authorityMatrixRoleId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/base-products":{"get":{"description":"Get base products list","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns base products list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"trialPeriodInDays":{"type":"number"},"giftCredit":{"type":"number"},"creditSubscribeEnable":{"type":"boolean"},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}}},"required":["id","type","catalog","level","limit","prices"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/base-products \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/base-products';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/base-products',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/base-products\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/add-on-products":{"get":{"description":"Get add-on products list","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns add-on products list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}},"trialPeriodInDays":{"type":"number"}},"required":["id","type","catalog","unitAmount","prices"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/add-on-products \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/add-on-products';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/add-on-products',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/add-on-products\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription":{"get":{"description":"Get subscription detail by spaceId","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns subscription detail.","content":{"application/json":{"schema":{"type":"object","properties":{"base":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"creditSubscribeEnable":{"type":"boolean"},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"quantity":{"type":"number"},"priceId":{"type":"string","nullable":true},"unitAmount":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAt":{"type":"string","nullable":true},"isTrialUsed":{"type":"boolean"},"period":{"type":"string","enum":["month","year","lifetime"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["id","type","catalog","level","limit","status","quantity","priceId","unitAmount","interval","currentPeriodStart","currentPeriodEnd","cancelAt"]},"credit":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]},"rowCount":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]},"attachmentSize":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]},"automationRun":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"quantity":{"type":"number"},"interval":{"type":"string","enum":["month","year"]},"cancelAt":{"type":"string","nullable":true}},"required":["id","type","catalog","unitAmount","quantity","interval","cancelAt"]}},"required":["base"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/subscription\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Cancel subscription for a space","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"required":true,"name":"type","in":"query"},{"schema":{"type":"string"},"required":false,"name":"successUrl","in":"query"}],"responses":{"200":{"description":"Cancel successfully","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","nullable":true}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/billing/subscription?type=SOME_STRING_VALUE&successUrl=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing":{"get":{"description":"Get space billing details","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns space billing details.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"plan":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"interval":{"type":"string","enum":["month","year"]},"quantity":{"type":"number"},"unitAmount":{"type":"number"},"usage":{"type":"object","properties":{"numRows":{"type":"number"},"attachmentSize":{"type":"number"},"numDatabaseConnections":{"type":"number"},"numCollaborators":{"type":"number"},"numAutomationSendEmail":{"type":"number"},"numAutomationRuns":{"type":"number"}},"required":["numRows","attachmentSize","numDatabaseConnections","numCollaborators","numAutomationSendEmail","numAutomationRuns"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"cancelAt":{"type":"string","nullable":true},"cycleStart":{"type":"string","nullable":true},"cycleEnd":{"type":"string","nullable":true},"status":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","trialing","past_due","unpaid","paused","seat_limit_exceeded"]},"period":{"type":"string","enum":["month","year","lifetime"]},"appSumoTier":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]},{"type":"number","enum":[3]},{"type":"number","enum":[4]}]}},"required":["level","interval","quantity","unitAmount","usage","limit","currentPeriodStart","currentPeriodEnd","cancelAt","status"]},"credit":{"type":"object","properties":{"amount":{"type":"number"},"usedAmount":{"type":"number"},"rewardAmount":{"type":"number","nullable":true}},"required":["amount","usedAmount"]},"detail":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}},"required":["name","email"]}},"required":["spaceId","plan","credit","detail"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/invoice/base-list":{"get":{"description":"Get paginated invoice list by spaceId","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Returns paginated invoice list.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","nullable":true},"number":{"type":"string","nullable":true},"amount":{"type":"number"},"currency":{"type":"string"},"createdTime":{"type":"string"},"status":{"type":"string","nullable":true},"pdfUrl":{"type":"string","nullable":true}},"required":["id","number","amount","currency","createdTime","status"]}},"hasMore":{"type":"boolean"},"pageSize":{"type":"number"}},"required":["data","hasMore","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/invoice/base-list?pageSize=SOME_INTEGER_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/{licenseId}":{"get":{"description":"Get license details for the self-hosted related subscription","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"licenseId","in":"path"}],"responses":{"200":{"description":"Returns license details for the self-hosted related subscription","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"instanceId":{"type":"string"},"currentPeriodStart":{"type":"string"},"currentPeriodEnd":{"type":"string"},"quantity":{"type":"number"},"unitAmount":{"type":"number"},"licenseKey":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]}},"required":["id","instanceId","currentPeriodStart","currentPeriodEnd","quantity","unitAmount","licenseKey","interval","level"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/license/%7BlicenseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/%7BlicenseId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license/%7BlicenseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/license/%7BlicenseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license":{"get":{"description":"Get license list","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns license list","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"instanceId":{"type":"string"},"currentPeriodStart":{"type":"string"},"currentPeriodEnd":{"type":"string"},"quantity":{"type":"number"},"unitAmount":{"type":"number"},"licenseKey":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]}},"required":["id","instanceId","currentPeriodStart","currentPeriodEnd","quantity","unitAmount","licenseKey","interval","level"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/license \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/license\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/manage-billing":{"post":{"description":"Manage billing","tags":["billing","license"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"returnUrl":{"type":"string"}},"required":["returnUrl"]}}}},"responses":{"200":{"description":"Returns manage billing url","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/billing/subscription/license/manage-billing \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"returnUrl\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/manage-billing';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"returnUrl\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license/manage-billing',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({returnUrl: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"returnUrl\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/billing/subscription/license/manage-billing\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/manage-billing/availability":{"get":{"description":"Get manage billing portal availability","tags":["billing","license"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns whether user can access manage billing portal","content":{"application/json":{"schema":{"type":"object","properties":{"canAccessPortal":{"type":"boolean"}},"required":["canAccessPortal"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/subscription/license/manage-billing/availability \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/manage-billing/availability';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license/manage-billing/availability',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/subscription/license/manage-billing/availability\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/checkout":{"post":{"description":"Get checkout session url for a space","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"priceId":{"type":"string"},"quantity":{"type":"number"},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"},"isTrial":{"type":"boolean"},"clientReferenceId":{"type":"string"}},"required":["priceId","quantity"]}}}},"responses":{"200":{"description":"Returns checkout session url about a space.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","nullable":true}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/checkout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"isTrial\":true,\"clientReferenceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/checkout';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"isTrial\":true,\"clientReferenceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription/checkout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n priceId: 'string',\n quantity: 0,\n successUrl: 'string',\n cancelUrl: 'string',\n isTrial: true,\n clientReferenceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"priceId\\\":\\\"string\\\",\\\"quantity\\\":0,\\\"successUrl\\\":\\\"string\\\",\\\"cancelUrl\\\":\\\"string\\\",\\\"isTrial\\\":true,\\\"clientReferenceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/billing/subscription/checkout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/subscription/license/checkout":{"post":{"description":"Get checkout session url for a self-hosted license","tags":["billing"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string","minLength":36,"maxLength":36},"priceId":{"type":"string"},"quantity":{"type":"number"},"successUrl":{"type":"string"},"cancelUrl":{"type":"string"},"clientReferenceId":{"type":"string"}},"required":["instanceId","priceId","quantity"]}}}},"responses":{"200":{"description":"Returns checkout session url about a self-hosted license.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","nullable":true}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/billing/subscription/license/checkout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"instanceId\":\"stringstringstringstringstringstring\",\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"clientReferenceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/subscription/license/checkout';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"instanceId\":\"stringstringstringstringstringstring\",\"priceId\":\"string\",\"quantity\":0,\"successUrl\":\"string\",\"cancelUrl\":\"string\",\"clientReferenceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/subscription/license/checkout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n instanceId: 'stringstringstringstringstringstring',\n priceId: 'string',\n quantity: 0,\n successUrl: 'string',\n cancelUrl: 'string',\n clientReferenceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"instanceId\\\":\\\"stringstringstringstringstringstring\\\",\\\"priceId\\\":\\\"string\\\",\\\"quantity\\\":0,\\\"successUrl\\\":\\\"string\\\",\\\"cancelUrl\\\":\\\"string\\\",\\\"clientReferenceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/billing/subscription/license/checkout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/subscription/plan":{"get":{"description":"Retrieves the plan subscription","tags":["billing"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the plan subscription.","content":{"application/json":{"schema":{"type":"object","properties":{"quantity":{"type":"number"}},"required":["quantity"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/plan \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/subscription/plan';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/subscription/plan',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/subscription/plan\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/billing/all-products":{"get":{"description":"Get all products collection","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns all products collection.","content":{"application/json":{"schema":{"type":"object","properties":{"baseProducts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"level":{"type":"string","enum":["free","pro","business","enterprise"]},"trialPeriodInDays":{"type":"number"},"giftCredit":{"type":"number"},"creditSubscribeEnable":{"type":"boolean"},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"maxAutomationHistoryDays":{"type":"number"},"automationEnable":{"type":"boolean"},"auditLogEnable":{"type":"boolean"},"adminPanelEnable":{"type":"boolean"},"rowColoringEnable":{"type":"boolean"},"buttonFieldEnable":{"type":"boolean"},"fieldAIEnable":{"type":"boolean"},"userGroupEnable":{"type":"boolean"},"advancedExtensionsEnable":{"type":"boolean"},"advancedPermissionsEnable":{"type":"boolean"},"passwordRestrictedSharesEnable":{"type":"boolean"},"authenticationEnable":{"type":"boolean"},"domainVerificationEnable":{"type":"boolean"},"organizationEnable":{"type":"boolean"},"apiRateLimit":{"type":"number"},"chatAIEnable":{"type":"boolean"},"appEnable":{"type":"boolean"},"customDomainEnable":{"type":"boolean"},"maxNumAutomationSendEmail":{"type":"number"}},"required":["maxRows","maxSizeAttachments","maxNumAutomationRuns","maxNumDatabaseConnections","maxRevisionHistoryDays","maxAutomationHistoryDays","automationEnable","auditLogEnable","adminPanelEnable","rowColoringEnable","buttonFieldEnable","fieldAIEnable","userGroupEnable","advancedExtensionsEnable","advancedPermissionsEnable","passwordRestrictedSharesEnable","authenticationEnable","domainVerificationEnable","organizationEnable","apiRateLimit","chatAIEnable","appEnable","customDomainEnable","maxNumAutomationSendEmail"]},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}}},"required":["id","type","catalog","level","limit","prices"]}},"addOnProducts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["base","credit","rowCount","attachmentSize","automationRun"]},"catalog":{"type":"string","enum":["cloud","self-hosted"]},"unitAmount":{"type":"number"},"prices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legacyIds":{"type":"array","items":{"type":"string"}},"productId":{"type":"string"},"type":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"intervalCount":{"type":"number"},"unitAmount":{"type":"number"},"currency":{"type":"string"}},"required":["id","legacyIds","productId","type","interval","intervalCount","unitAmount","currency"]}},"trialPeriodInDays":{"type":"number"}},"required":["id","type","catalog","unitAmount","prices"]}}},"required":["baseProducts","addOnProducts"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/billing/all-products \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/billing/all-products';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/billing/all-products',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/billing/all-products\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-summary":{"get":{"description":"Get space credit summary","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns space credit summary.","content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number"},"usedAmount":{"type":"number"},"leftAmount":{"type":"number"}},"required":["amount","usedAmount","leftAmount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/credit-summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/credit-summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-detail":{"get":{"description":"Get space credit usage detail by month","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"required":true,"name":"month","in":"query"}],"responses":{"200":{"description":"Returns space credit usage detail.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"automation_ai_action":{"type":"number"},"ai_generation":{"type":"number"},"field_ai_generation":{"type":"number"},"ai_chat":{"type":"number"},"app_generation":{"type":"number"}},"required":["date","automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/credit-detail?month=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/credit-history":{"get":{"description":"Get space credit history list with cursor pagination","tags":["billing","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"required":true,"name":"month","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"required":false,"name":"take","in":"query"},{"schema":{"type":"string","enum":["automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation"]},"required":false,"name":"sourceType","in":"query"},{"schema":{"type":"string","enum":["createdTime","amount"]},"required":false,"name":"orderBy","in":"query"},{"schema":{"type":"string","enum":["asc","desc"]},"required":false,"name":"order","in":"query"}],"responses":{"200":{"description":"Returns credit history records with cursor pagination.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sourceType":{"type":"string","enum":["automation_ai_action","ai_generation","field_ai_generation","ai_chat","app_generation"]},"amount":{"type":"number"},"createdTime":{"type":"string"},"displayName":{"type":"string","nullable":true},"user":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","avatar"]}},"required":["id","sourceType","amount","createdTime","displayName","user"]}},"nextCursor":{"type":"string","nullable":true}},"required":["data","nextCursor"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/credit-history?month=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE&take=SOME_INTEGER_VALUE&sourceType=SOME_STRING_VALUE&orderBy=SOME_STRING_VALUE&order=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/billing/manage-portal":{"get":{"description":"Get Stripe customer portal URL for managing billing details","tags":["billing"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns Stripe customer portal URL.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/billing/manage-portal \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/billing/manage-portal';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/billing/manage-portal',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/billing/manage-portal\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}":{"patch":{"description":"Update a user info","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"isActivated":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Update a user info successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"isActivated\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"isActivated\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', isActivated: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"isActivated\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/user/%7BuserId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a user by user ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/user/%7BuserId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user":{"get":{"description":"Get paginated users for the instance","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeDeleted","in":"query"},{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated users for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"deletedTime":{"type":"string","nullable":true},"lastSignTime":{"type":"string","nullable":true},"deactivatedTime":{"type":"string","nullable":true},"isAdmin":{"type":"boolean","nullable":true},"billable":{"type":"boolean","nullable":true}},"required":["id","name","email","avatar","createdTime","deletedTime","lastSignTime","deactivatedTime","isAdmin"]}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/user?includeDeleted=SOME_BOOLEAN_VALUE&page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}/permanent-delete":{"delete":{"description":"Permanent delete a user by user ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Permanent delete a user by user ID for admin"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D/permanent-delete \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/permanent-delete';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D/permanent-delete',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/user/%7BuserId%7D/permanent-delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}/restore-delete":{"post":{"description":"Restore a deleted user","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Restore a deleted user successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D/restore-delete \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/restore-delete';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D/restore-delete',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/admin/user/%7BuserId%7D/restore-delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/user/{userId}/admin":{"patch":{"description":"Set or unset admin privilege for a user","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isAdmin":{"type":"boolean"}},"required":["isAdmin"]}}}},"responses":{"200":{"description":"User admin privilege updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/user/%7BuserId%7D/admin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"isAdmin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/user/%7BuserId%7D/admin';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"isAdmin\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/user/%7BuserId%7D/admin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({isAdmin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isAdmin\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/user/%7BuserId%7D/admin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space/{spaceId}":{"patch":{"description":"update enterprise space information","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"autoJoin":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Update enterprise space successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"autoJoin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"autoJoin\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/space/%7BspaceId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', autoJoin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"autoJoin\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/admin/space/%7BspaceId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a space by space ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/space/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space/%7BspaceId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/space/%7BspaceId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/space/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/space":{"get":{"description":"Get paginated spaces for the instance","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated spaces for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdTime":{"type":"string"},"autoJoin":{"type":"boolean","nullable":true},"baseCount":{"type":"number"},"collaboratorCount":{"type":"number"}},"required":["id","name","createdTime","autoJoin","baseCount","collaboratorCount"]}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/space?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/organization":{"get":{"description":"Get paginated organizations for the instance","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"number","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"required":false,"name":"pageSize","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Returns paginated organizations for the instance.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"userCount":{"type":"number"},"spaceCount":{"type":"number"},"adminCount":{"type":"number"},"admins":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email","avatar"]}}},"required":["id","name","createdTime","createdBy","userCount","spaceCount","adminCount","admins"]}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/organization?page=SOME_NUMBER_VALUE&pageSize=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a new organization","tags":["admin"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"201":{"description":"Organization created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"}},"required":["id","name","createdTime","createdBy"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/organization \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/admin/organization\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/organization/{organizationId}":{"delete":{"description":"Delete an organization by organization ID for admin","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/organization/%7BorganizationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization/%7BorganizationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization/%7BorganizationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/organization/%7BorganizationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/organization/{organizationId}/admin":{"get":{"description":"Get organization admin users","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Returns organization admin users.","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email","avatar"]}}},"required":["users"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization/%7BorganizationId%7D/admin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/organization/%7BorganizationId%7D/admin\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update organization admin status for a user","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["userId","isAdmin"]}}}},"responses":{"200":{"description":"Organization admin status updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"userId\":\"string\",\"isAdmin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/organization/%7BorganizationId%7D/admin';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"userId\":\"string\",\"isAdmin\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/organization/%7BorganizationId%7D/admin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({userId: 'string', isAdmin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userId\\\":\\\"string\\\",\\\"isAdmin\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/admin/organization/%7BorganizationId%7D/admin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license":{"get":{"description":"Get enterprise license information","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns enterprise license information.","content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string"},"organizationId":{"type":"string"},"license":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"plan":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"quantity":{"type":"number"},"currentPeriodStart":{"type":"string","nullable":true},"currentPeriodEnd":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true}},"required":["level","quantity","currentPeriodStart","currentPeriodEnd","expiredTime"]}},"required":["id","plan"]}},"required":["instanceId","license"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/enterprise-license \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/enterprise-license',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/enterprise-license\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a enterprise license","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enterprise license registered successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/enterprise-license \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/enterprise-license',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/admin/enterprise-license\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/enterprise-license/{licenseId}":{"patch":{"description":"Update a enterprise license by license ID","tags":["admin"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Enterprise license updated successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/admin/enterprise-license/%7BlicenseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/enterprise-license/%7BlicenseId%7D';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/enterprise-license/%7BlicenseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/admin/enterprise-license/%7BlicenseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/audit-logs":{"get":{"description":"Get audit logs with filtering and pagination","tags":["admin"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"userId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"action","in":"query"},{"schema":{"type":"string"},"required":false,"name":"resourceId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"startTime","in":"query"},{"schema":{"type":"string"},"required":false,"name":"endTime","in":"query"},{"schema":{"type":"integer","minimum":0,"default":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":20},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Returns paginated audit logs.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"action":{"type":"string"},"resourceId":{"type":"string"},"origin":{"type":"object","properties":{"ip":{"type":"string"},"byApi":{"type":"boolean"},"userAgent":{"type":"string"},"referer":{"type":"string"}},"required":["ip"]},"payloadVersion":{"type":"string"},"payload":{"nullable":true},"createdTime":{"type":"string"}},"required":["id","userId","action","origin","payloadVersion","createdTime"]}}},"required":["items"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/audit-logs?userId=SOME_STRING_VALUE&action=SOME_STRING_VALUE&resourceId=SOME_STRING_VALUE&startTime=SOME_STRING_VALUE&endTime=SOME_STRING_VALUE&skip=SOME_INTEGER_VALUE&take=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/summary":{"get":{"description":"Retrieves a summary of workflow observability","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"workflowIds","in":"path"},{"schema":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"required":false,"name":"timeRange","in":"path"},{"schema":{"type":"string","enum":["30m","1h","6h","1d","3d","7d","30d"]},"required":false,"name":"relativeTime","in":"path"},{"schema":{"type":"boolean"},"required":false,"name":"isActive","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"baseIds","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"spaceIds","in":"path"},{"schema":{"type":"array","items":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"]}},"required":false,"name":"triggerType","in":"path"}],"responses":{"200":{"description":"Returns a summary of workflow observability","content":{"application/json":{"schema":{"type":"object","properties":{"workflow":{"type":"object","properties":{"activeCount":{"type":"number"},"totalCount":{"type":"number"}},"required":["activeCount","totalCount"]},"workflowRuns":{"type":"object","properties":{"totalCount":{"type":"number"},"statusStats":{"type":"object","properties":{"pending":{"type":"number"},"running":{"type":"number"},"success":{"type":"number"},"failed":{"type":"number"},"canceled":{"type":"number"}},"required":["pending","running","success","failed","canceled"]},"levelStats":{"type":"object","properties":{"critical":{"type":"number"},"warning":{"type":"number"},"healthy":{"type":"number"}},"required":["critical","warning","healthy"]}},"required":["totalCount","statusStats","levelStats"]}},"required":["workflow","workflowRuns"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/observability/workflow/summary \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/summary';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow/summary',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/observability/workflow/summary\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow":{"get":{"description":"get observability workflow list","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"workflowIds","in":"query"},{"schema":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"required":false,"name":"timeRange","in":"query"},{"schema":{"type":"string","enum":["30m","1h","6h","1d","3d","7d","30d"]},"required":false,"name":"relativeTime","in":"query"},{"schema":{"type":"boolean"},"required":false,"name":"isActive","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"baseIds","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"spaceIds","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"]}},"required":false,"name":"triggerType","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"base":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["id","name"]},"triggerType":{"type":"string","enum":["recordCreated","recordUpdated","recordCreatedOrUpdated","recordMatchesConditions","buttonClick","formSubmitted","scheduledTime","webhook"]},"createdTime":{"type":"string"},"lastRunTime":{"type":"string"},"runStats":{"type":"object","properties":{"statusStats":{"type":"object","properties":{"pending":{"type":"number"},"running":{"type":"number"},"success":{"type":"number"},"failed":{"type":"number"},"canceled":{"type":"number"}},"required":["pending","running","success","failed","canceled"]},"avgSpent":{"type":"number"},"totalCount":{"type":"number"}},"required":["statusStats","avgSpent","totalCount"]},"level":{"type":"string","enum":["healthy","warning","critical"]},"isActive":{"type":"boolean"}},"required":["id","name","base","triggerType","createdTime","runStats","level"]}},"total":{"type":"number"}},"required":["data","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/observability/workflow?workflowIds=SOME_ARRAY_VALUE&timeRange=SOME_OBJECT_VALUE&relativeTime=SOME_STRING_VALUE&isActive=SOME_BOOLEAN_VALUE&baseIds=SOME_ARRAY_VALUE&spaceIds=SOME_ARRAY_VALUE&triggerType=SOME_ARRAY_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/{workflowId}/deactivate":{"post":{"description":"Deactivate a workflow observability","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Workflow observability deactivated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/deactivate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/deactivate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow/%7BworkflowId%7D/deactivate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/admin/observability/workflow/%7BworkflowId%7D/deactivate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/{workflowId}":{"delete":{"description":"Delete a workflow observability","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Workflow observability deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow/%7BworkflowId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/admin/observability/workflow/%7BworkflowId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/observability/workflow/{workflowId}/run-history":{"get":{"description":"get workflow run history","tags":["admin","observability"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string","enum":["success","failed","running","canceled","pending"]},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["success","failed","running","canceled","pending"]},"errorMsg":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]},"spent":{"type":"number"},"createdTime":{"type":"string"}},"required":["id","status","createdTime"]}},"total":{"type":"number"}},"required":["runs","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/observability/workflow/%7BworkflowId%7D/run-history?skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&status=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/files":{"patch":{"description":"Update app files","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"App files updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/files \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/files';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/files',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/files\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/props":{"patch":{"description":"Update app props","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"App props updated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"}},"required":["id","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/props \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/props';\nconst options = {method: 'PATCH', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/props',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/props\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/run":{"post":{"description":"Run the app code","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"}],"responses":{"201":{"description":"The app running result","content":{"application/json":{"schema":{"type":"object","properties":{"previewUrl":{"type":"string","description":"Preview URL"}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/run \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/run';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/run',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/run\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/export-code":{"get":{"description":"Export app source code as a ZIP file","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"Source code exported successfully as ZIP file","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/export-code\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/import-code":{"post":{"description":"Import app source code from a ZIP file","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"nullable":true,"description":"ZIP file containing source code"}}}}}},"responses":{"200":{"description":"Source code imported successfully","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"number"},"filesCount":{"type":"number"}},"required":["version","filesCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form file=null"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code';\nconst form = new FormData();\nform.append('file', 'null');\n\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\noptions.body = form;\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write('-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\"file\"\\r\\n\\r\\nnull\\r\\n-----011000010111000001101001--\\r\\n');\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"file\\\"\\r\\n\\r\\nnull\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/import-code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/deploy":{"post":{"description":"Deploy app to Vercel","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"responses":{"201":{"description":"Deployment result","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["deploying","success","failed"],"description":"Deployment status"},"version":{"type":"number","description":"App version"},"publicUrl":{"type":"string","description":"Public URL"},"error":{"type":"string","description":"Error message if failed"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/deploy/status":{"get":{"description":"Get app deployment status","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"responses":{"200":{"description":"Deployment status","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["idle","deploying","success","failed"],"description":"Deployment status"},"version":{"type":"number","description":"App version"},"publicUrl":{"type":"string","description":"Public URL"},"error":{"type":"string","description":"Error message if failed"},"startTime":{"type":"number","description":"Deployment start timestamp"},"endTime":{"type":"number","description":"Deployment end timestamp"}},"required":["status"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/deploy/status\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}":{"delete":{"summary":"Delete app","description":"Delete app by its ID.","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/app/{appId}/permanent":{"delete":{"summary":"Permanently delete app","description":"Permanently delete an app and all its data. This action cannot be undone.","tags":["app"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"}],"responses":{"200":{"description":"App permanently deleted."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/app/%7BappId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication/{id}":{"get":{"description":"Get a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'feishu',\n config: {appId: 'string', appSecret: 'string'},\n id: 'string',\n name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication":{"get":{"description":"Get a authentication list","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a authentication","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'feishu',\n config: {appId: 'string', appSecret: 'string'},\n id: 'string',\n name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/authentication\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/authentication/providers":{"get":{"description":"Get providers","tags":["enterprise","authentication"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["oidc","feishu"]}},"required":["id","name","type"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/providers \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/authentication/providers';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/authentication/providers',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/authentication/providers\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/domain-verification":{"delete":{"description":"Delete a domain verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"domain","in":"query"}],"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/domain-verification?domain=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a domain verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"createdTime":{"type":"string"}},"required":["id","domain","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/domain-verification',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/domain-verification\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a domain verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"verifyCode":{"type":"string"}},"required":["domain","verifyCode"]}}}},"responses":{"200":{"description":"Domain verification created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"domain\":\"string\",\"verifyCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"domain\":\"string\",\"verifyCode\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/domain-verification',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({domain: 'string', verifyCode: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\",\\\"verifyCode\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/domain-verification\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/domain-verification/send-verification-email":{"post":{"description":"Send email verification","tags":["enterprise","domain-verification"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"domain\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"domain\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({domain: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/domain-verification/send-verification-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}":{"get":{"description":"Get organization","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Get organization","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"domain":{"type":"array","items":{"type":"string"}}},"required":["name","id"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/rename":{"put":{"description":"Rename organization","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Rename organization"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/rename';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/organization/%7BorganizationId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/update-auto-space":{"put":{"description":"Update auto space","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"autoSpaceType":{"type":"string","enum":["all","selected","none"]},"autoSpaceIds":{"type":"array","items":{"type":"string"}}},"required":["autoSpaceType"]}}}},"responses":{"200":{"description":"Update auto space","content":{"application/json":{"schema":{"type":"object","properties":{"autoSpaceType":{"type":"string","enum":["all","selected","none"]},"autoSpaceIds":{"type":"array","items":{"type":"string"}}},"required":["autoSpaceType"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/update-auto-space \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"autoSpaceType\":\"all\",\"autoSpaceIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/update-auto-space';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"autoSpaceType\":\"all\",\"autoSpaceIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/update-auto-space',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({autoSpaceType: 'all', autoSpaceIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"autoSpaceType\\\":\\\"all\\\",\\\"autoSpaceIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/organization/%7BorganizationId%7D/update-auto-space\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/space":{"get":{"description":"Get organization space","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get organization space","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"spaceId":{"type":"string"},"spaceName":{"type":"string"}},"required":["spaceId","spaceName"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/space \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/space';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/space',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/space\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/setting":{"get":{"description":"Get organization setting","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get organization setting"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/setting \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/setting';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/setting',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/setting\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/users":{"get":{"description":"Get organization users","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Get organization users","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"createdTime":{"type":"string"},"isAdmin":{"type":"boolean"},"isExternal":{"type":"boolean"},"deactivatedTime":{"type":"string"}},"required":["id","name","email","createdTime"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/users?skip=SOME_NUMBER_VALUE&limit=SOME_NUMBER_VALUE&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"tags":["organization","user"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"departmentId":{"type":"string"},"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"}},"required":["email"]}}}}},"responses":{"201":{"description":"Create users successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"}},"required":["id","email","name"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/users \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '[{\"departmentId\":\"string\",\"id\":\"string\",\"email\":\"string\",\"name\":\"string\",\"phone\":\"string\"}]'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/users';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '[{\"departmentId\":\"string\",\"id\":\"string\",\"email\":\"string\",\"name\":\"string\",\"phone\":\"string\"}]'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/users',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify([\n {\n departmentId: 'string',\n id: 'string',\n email: 'string',\n name: 'string',\n phone: 'string'\n }\n]));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"[{\\\"departmentId\\\":\\\"string\\\",\\\"id\\\":\\\"string\\\",\\\"email\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"phone\\\":\\\"string\\\"}]\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/users\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user":{"post":{"description":"Add organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"}}},"required":["emails"]}}}},"responses":{"200":{"description":"Add organization user","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"email":{"type":"string","format":"email"},"success":{"type":"boolean","enum":[true]}},"required":["email","success"]},{"type":"object","properties":{"email":{"type":"string","format":"email"},"success":{"type":"boolean","enum":[false]},"message":{"type":"string"}},"required":["email","success","message"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"emails\":[\"user@example.com\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"emails\":[\"user@example.com\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({emails: ['user@example.com']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"emails\\\":[\\\"user@example.com\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userIds":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["userIds"]}}}},"responses":{"200":{"description":"Delete organization user"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user';\nconst options = {\n method: 'DELETE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"userIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"DELETE\", \"/api/organization/%7BorganizationId%7D/user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user/{userId}/deactivate":{"post":{"description":"Deactivate organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"User deactivated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/deactivate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user/{userId}/activate":{"post":{"description":"Activate organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"User activated successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D/activate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user/{userId}":{"patch":{"description":"Update organization user","tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isAdmin":{"type":"boolean"}}}}}},"responses":{"200":{"description":"User updated"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"isAdmin\":true}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"isAdmin\":true}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({isAdmin: true}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"isAdmin\\\":true}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"userId","in":"path"}],"responses":{"200":{"description":"Get organization user","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"organization":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name","email","organization"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user/%7BuserId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user/%7BuserId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/user/%7BuserId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/user-exists":{"get":{"tags":["organization","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"userIds","in":"query"}],"responses":{"200":{"description":"User exists","content":{"application/json":{"schema":{"type":"array","items":{"type":"boolean"}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/user-exists?userIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-scope":{"put":{"description":"Update department scope","tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentScope":{"type":"string","enum":["all","related"]}},"required":["departmentScope"]}}}},"responses":{"200":{"description":"Update department scope","content":{"application/json":{"schema":{"type":"object","properties":{"departmentScope":{"type":"string","enum":["all","related"]}},"required":["departmentScope"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-scope \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"departmentScope\":\"all\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-scope';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"departmentScope\":\"all\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-scope',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({departmentScope: 'all'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentScope\\\":\\\"all\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/organization/%7BorganizationId%7D/department-scope\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/count":{"get":{"description":"Get space manage list total","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Get space manage list total successfully","content":{"application/json":{"schema":{"type":"number"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/count \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/count';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage/count',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage/count\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage":{"get":{"description":"Get space manage list","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"number","nullable":true,"default":0},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true,"maximum":100,"default":10},"required":false,"name":"take","in":"query"}],"responses":{"200":{"description":"Get space manage list successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"baseCount":{"type":"number"},"collaboratorCount":{"type":"number"},"isOrganization":{"type":"boolean"}},"required":["id","name","baseCount","collaboratorCount"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}/remove-organization":{"delete":{"description":"Remove space from organization","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Space removed from organization successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/remove-organization\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}/add-organization":{"post":{"description":"Add space to organization","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"201":{"description":"Space added to organization successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D/add-organization\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/enterprise/{organizationId}/space-manage/{spaceId}":{"get":{"description":"Get space manage detail","tags":["space-manage","enterprise"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Get space manage detail successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isOrganization":{"type":"boolean"},"base":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["id","name"]}},"collaboratorCount":{"type":"number"},"externalUserCount":{"type":"number"}},"required":["id","name","isOrganization","base","collaboratorCount","externalUserCount"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/enterprise/%7BorganizationId%7D/space-manage/%7BspaceId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department/{departmentId}":{"get":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"responses":{"200":{"description":"Get department successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}},"hasChildren":{"type":"boolean"}},"required":["id","name","hasChildren"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"responses":{"200":{"description":"Delete department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department/{departmentId}/rename":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Rename department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department/{departmentId}/move":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"parentId":{"type":"string","nullable":true}},"required":["parentId"]}}}},"responses":{"200":{"description":"Move department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"parentId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"parentId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({parentId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"parentId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department/%7BdepartmentId%7D/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department":{"post":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Create department successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"id\":\"string\",\"name\":\"string\",\"parentId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"id\":\"string\",\"name\":\"string\",\"parentId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({id: 'string', name: 'string', parentId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"parentId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/department\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"parentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"}],"responses":{"200":{"description":"Get department list successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}},"hasChildren":{"type":"boolean"}},"required":["id","name","hasChildren"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/department?parentId=SOME_STRING_VALUE&search=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-user":{"post":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentIds":{"type":"array","items":{"type":"string"}},"userIds":{"type":"array","items":{"type":"string"}}},"required":["departmentIds","userIds"]}}}},"responses":{"200":{"description":"Add department users successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"departmentIds\":[\"string\"],\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"departmentIds\":[\"string\"],\"userIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({departmentIds: ['string'], userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentIds\\\":[\\\"string\\\"],\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/organization/%7BorganizationId%7D/department-user\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"departmentId","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":true,"name":"userIds","in":"query"}],"responses":{"200":{"description":"Remove department users successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&userIds=SOME_ARRAY_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"departmentId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"includeChildrenDepartment","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":0},"required":false,"name":"skip","in":"query"},{"schema":{"anyOf":[{"type":"string"},{"type":"number"}],"example":50},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"Get department users successfully","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"departments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"path":{"type":"array","items":{"type":"string"}},"pathName":{"type":"array","items":{"type":"string"}}},"required":["id","name"]}}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/department-user?departmentId=SOME_STRING_VALUE&includeChildrenDepartment=SOME_STRING_VALUE&skip=0&take=50&search=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-user/move":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentId":{"type":"string"},"toDepartmentId":{"type":"string"},"userIds":{"type":"array","items":{"type":"string"}}},"required":["departmentId","toDepartmentId","userIds"]}}}},"responses":{"200":{"description":"Move department users successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/move \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"departmentId\":\"string\",\"toDepartmentId\":\"string\",\"userIds\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/move';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"departmentId\":\"string\",\"toDepartmentId\":\"string\",\"userIds\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user/move',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({departmentId: 'string', toDepartmentId: 'string', userIds: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentId\\\":\\\"string\\\",\\\"toDepartmentId\\\":\\\"string\\\",\\\"userIds\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department-user/move\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/department-user/department":{"patch":{"tags":["organization","department"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"departmentIds":{"type":"array","items":{"type":"string"}},"userId":{"type":"string"}},"required":["userId"]}}}},"responses":{"200":{"description":"Update user department successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/department \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"departmentIds\":[\"string\"],\"userId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/department-user/department';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"departmentIds\":[\"string\"],\"userId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/department-user/department',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({departmentIds: ['string'], userId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"departmentIds\\\":[\\\"string\\\"],\\\"userId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/organization/%7BorganizationId%7D/department-user/department\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/organization/{organizationId}/me":{"get":{"description":"Get organization me","tags":["organization"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"organizationId","in":"path"}],"responses":{"200":{"description":"Get organization me","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string"},"organizationId":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["userId","organizationId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/organization/%7BorganizationId%7D/me \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/organization/%7BorganizationId%7D/me';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/organization/%7BorganizationId%7D/me',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/organization/%7BorganizationId%7D/me\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/instance/organization":{"get":{"description":"Get instance organization, only for enterprise edition","tags":["organization","instance"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get instance organization successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/instance/organization \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/instance/organization';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/instance/organization',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/instance/organization\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/sql-query":{"post":{"description":"Execute SQL query on a base","summary":"Execute SQL query","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The base ID to execute query on"},"required":true,"description":"The base ID to execute query on","name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string","minLength":1,"description":"The SQL query to execute","example":"SELECT * FROM table_name LIMIT 10"}},"required":["sql"]}}}},"responses":{"200":{"description":"Query executed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}},"description":"The query result rows"}},"required":["rows"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/sql-query \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sql\":\"SELECT * FROM table_name LIMIT 10\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/sql-query';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sql\":\"SELECT * FROM table_name LIMIT 10\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/sql-query',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({sql: 'SELECT * FROM table_name LIMIT 10'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sql\\\":\\\"SELECT * FROM table_name LIMIT 10\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/sql-query\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/sign-attachment-urls":{"post":{"description":"Generate signed URLs for attachment files","summary":"Sign attachment URLs","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The base ID"},"required":true,"description":"The base ID","name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"The file path of the attachment"},"token":{"type":"string","description":"The access token for the attachment"},"mimetype":{"type":"string","description":"The MIME type of the attachment","example":"image/png"}},"required":["path","token"]},"description":"List of attachments to sign"}},"required":["attachments"]}}}},"responses":{"200":{"description":"URLs signed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","description":"The original attachment token"},"url":{"type":"string","description":"The signed URL for the attachment"}},"required":["token","url"]},"description":"List of signed attachments with their tokens and URLs"}},"required":["attachments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/sign-attachment-urls \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachments\":[{\"path\":\"string\",\"token\":\"string\",\"mimetype\":\"image/png\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/sign-attachment-urls';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachments\":[{\"path\":\"string\",\"token\":\"string\",\"mimetype\":\"image/png\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/sign-attachment-urls',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({attachments: [{path: 'string', token: 'string', mimetype: 'image/png'}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"path\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\",\\\"mimetype\\\":\\\"image/png\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/sign-attachment-urls\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/create":{"post":{"description":"Create chat","tags":["chat"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"type":{"type":"string"},"resourceId":{"type":"string"}},"required":["baseId"]}}}},"responses":{"201":{"description":"Succeed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/create \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"baseId\":\"string\",\"type\":\"string\",\"resourceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/create';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"baseId\":\"string\",\"type\":\"string\",\"resourceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/create',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({baseId: 'string', type: 'string', resourceId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"baseId\\\":\\\"string\\\",\\\"type\\\":\\\"string\\\",\\\"resourceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/messages":{"get":{"description":"Get chat messages","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"responses":{"200":{"description":"Chat messages"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Clear all messages in a chat","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/messages\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/history":{"get":{"description":"Get chat history","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"type","in":"query"}],"responses":{"200":{"description":"Get chat history successfully","content":{"application/json":{"schema":{"type":"object","properties":{"history":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"lastModifiedTime":{"type":"string"}},"required":["id","name","createdTime","createdBy"]}},"total":{"type":"number"}},"required":["history","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/delete":{"delete":{"tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"responses":{"200":{"description":"Chat deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/rename":{"patch":{"tags":["chat"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Chat renamed"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/stop":{"post":{"description":"Stop an active chat stream and prevent resume","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop';\nconst options = {method: 'POST', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/stop\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/suggestions":{"post":{"tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["recommend","ask","analyze","build"]},"lang":{"type":"string"}},"required":["type"]}}}},"responses":{"200":{"description":"Chat suggestions"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/suggestions \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"recommend\",\"lang\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/suggestions';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"recommend\",\"lang\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/suggestions',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({type: 'recommend', lang: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"recommend\\\",\\\"lang\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/suggestions\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/onboarding/scenarios":{"get":{"description":"Get onboarding scenarios with presigned URLs for attachments","tags":["chat"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Get onboarding scenarios successfully","content":{"application/json":{"schema":{"type":"object","properties":{"scenarios":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"placeholder":{"type":"string"},"prompt":{"type":"string"},"files":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"fileName":{"type":"string"},"path":{"type":"string"},"presignedUrl":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"}},"required":["token","fileName","path","presignedUrl","mimetype","size"]}}},"required":["id","placeholder","prompt","files"]}}},"required":["scenarios"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/chat/onboarding/scenarios \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/onboarding/scenarios';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/chat/onboarding/scenarios',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/chat/onboarding/scenarios\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/chat/onboarding/attachments":{"post":{"description":"Get attachment info by tokens. Used for landing page onboarding flow.","tags":["chat"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tokens":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20}},"required":["tokens"]}}}},"responses":{"200":{"description":"Get attachments successfully","content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"presignedUrl":{"type":"string"}},"required":["token","name","path","mimetype","size","presignedUrl"]}}},"required":["attachments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/chat/onboarding/attachments \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"tokens\":[\"string\"]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/onboarding/attachments';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"tokens\":[\"string\"]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/chat/onboarding/attachments',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({tokens: ['string']}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"tokens\\\":[\\\"string\\\"]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/chat/onboarding/attachments\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/text-extract":{"post":{"description":"Extract text content from attachments","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"path":{"type":"string"},"presignedUrl":{"type":"string"}},"required":["token","mimetype"]},"minItems":1,"description":"Attachments to extract text from"}},"required":["attachments"]}}}},"responses":{"200":{"description":"Extracted text content","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"extractedFiles":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"content":{"type":"string"},"charCount":{"type":"number"},"truncated":{"type":"boolean"},"isPreview":{"type":"boolean"}},"required":["token","content","charCount","truncated"]}},"totalCharacters":{"type":"number"},"truncatedFiles":{"type":"number"},"message":{"type":"string"},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/text-extract \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachments\":[{\"token\":\"string\",\"name\":\"string\",\"mimetype\":\"string\",\"size\":0,\"path\":\"string\",\"presignedUrl\":\"string\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/text-extract';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachments\":[{\"token\":\"string\",\"name\":\"string\",\"mimetype\":\"string\",\"size\":0,\"path\":\"string\",\"presignedUrl\":\"string\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/text-extract',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n attachments: [\n {\n token: 'string',\n name: 'string',\n mimetype: 'string',\n size: 0,\n path: 'string',\n presignedUrl: 'string'\n }\n ]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"token\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"mimetype\\\":\\\"string\\\",\\\"size\\\":0,\\\"path\\\":\\\"string\\\",\\\"presignedUrl\\\":\\\"string\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/text-extract\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/execute-script":{"post":{"description":"Execute TypeScript code in sandbox for chat tools","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"TypeScript code to execute"},"input":{"type":"object","additionalProperties":{"nullable":true},"description":"Input parameters for the script"},"integrationIds":{"type":"array","items":{"type":"string"},"description":"Integration IDs to inject into script context"},"dependencies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"NPM dependencies to install"}},"required":["code"]}}}},"responses":{"200":{"description":"Script execution result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"result":{"type":"object","additionalProperties":{"nullable":true}},"logs":{"type":"object","properties":{"stdout":{"type":"string"},"stderr":{"type":"string"}},"required":["stdout","stderr"]},"executionTime":{"type":"number"},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/execute-script \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"code\":\"string\",\"input\":{\"property1\":null,\"property2\":null},\"integrationIds\":[\"string\"],\"dependencies\":[{\"name\":\"string\",\"version\":\"string\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/execute-script';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"code\":\"string\",\"input\":{\"property1\":null,\"property2\":null},\"integrationIds\":[\"string\"],\"dependencies\":[{\"name\":\"string\",\"version\":\"string\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/execute-script',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n code: 'string',\n input: {property1: null, property2: null},\n integrationIds: ['string'],\n dependencies: [{name: 'string', version: 'string'}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"code\\\":\\\"string\\\",\\\"input\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"integrationIds\\\":[\\\"string\\\"],\\\"dependencies\\\":[{\\\"name\\\":\\\"string\\\",\\\"version\\\":\\\"string\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/execute-script\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/resolve-attachments":{"post":{"description":"Resolve attachment tokens to presigned URLs","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tokens":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Array of attachment tokens to resolve"},"nameHints":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional map of token -> filename for name hints"}},"required":["tokens"]}}}},"responses":{"200":{"description":"Resolved attachments with URLs","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"url":{"type":"string"},"name":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"path":{"type":"string"}},"required":["token","url"]}},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/resolve-attachments \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"tokens\":[\"string\"],\"nameHints\":{\"property1\":\"string\",\"property2\":\"string\"}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/resolve-attachments';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"tokens\":[\"string\"],\"nameHints\":{\"property1\":\"string\",\"property2\":\"string\"}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/resolve-attachments',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({tokens: ['string'], nameHints: {property1: 'string', property2: 'string'}}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"tokens\\\":[\\\"string\\\"],\\\"nameHints\\\":{\\\"property1\\\":\\\"string\\\",\\\"property2\\\":\\\"string\\\"}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/resolve-attachments\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/authentication/{id}":{"get":{"description":"Get a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"put":{"description":"Update a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'feishu',\n config: {appId: 'string', appSecret: 'string'},\n id: 'string',\n name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/space/%7BspaceId%7D/authentication/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successful deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/authentication/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/authentication":{"get":{"description":"Get a space authentication list","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/authentication\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a space authentication","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","name"]}]}}}},"responses":{"201":{"description":"Successful created","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["feishu"]},"config":{"type":"object","properties":{"appId":{"type":"string","minLength":1},"appSecret":{"type":"string","minLength":1}},"required":["appId","appSecret"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["oidc"]},"config":{"type":"object","properties":{"clientId":{"type":"string","minLength":1},"clientSecret":{"type":"string","minLength":1},"authorizationUrl":{"type":"string","format":"uri"},"tokenUrl":{"type":"string","format":"uri"},"userInfoUrl":{"type":"string","format":"uri"},"issuer":{"type":"string","format":"uri"}},"required":["clientId","clientSecret","authorizationUrl","tokenUrl","userInfoUrl","issuer"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["type","config","id","name"]}]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/authentication \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/authentication';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"type\":\"feishu\",\"config\":{\"appId\":\"string\",\"appSecret\":\"string\"},\"id\":\"string\",\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/authentication',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n type: 'feishu',\n config: {appId: 'string', appSecret: 'string'},\n id: 'string',\n name: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"type\\\":\\\"feishu\\\",\\\"config\\\":{\\\"appId\\\":\\\"string\\\",\\\"appSecret\\\":\\\"string\\\"},\\\"id\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/authentication\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/authentication/providers":{"get":{"description":"Get space authentication providers","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["oidc","feishu"]}},"required":["id","name","type"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/authentication/providers \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/authentication/providers';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/authentication/providers',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/authentication/providers\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/domain-verification":{"delete":{"description":"Delete a space domain verification","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"domain","in":"query"}],"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/space/%7BspaceId%7D/domain-verification?domain=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a space domain verification list","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"createdTime":{"type":"string"}},"required":["id","domain","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/domain-verification',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/domain-verification\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a space domain verification","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"verifyCode":{"type":"string"}},"required":["domain","verifyCode"]}}}},"responses":{"200":{"description":"Domain verification created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"}},"required":["id","domain"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"domain\":\"string\",\"verifyCode\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"domain\":\"string\",\"verifyCode\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/domain-verification',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({domain: 'string', verifyCode: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\",\\\"verifyCode\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/domain-verification\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/domain-verification/send-verification-email":{"post":{"description":"Send space email verification","tags":["space"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Successful"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification/send-verification-email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"domain\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/domain-verification/send-verification-email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"domain\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/domain-verification/send-verification-email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({domain: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"domain\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/domain-verification/send-verification-email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/api/{baseId}/ai/generate":{"post":{"description":"Generate AI text (non-streaming)","tags":["ai"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string"},"task":{"type":"string","enum":["coding","embedding","translation"],"description":"Quick model selection via predefined task type","example":"coding"},"modelKey":{"type":"string","description":"Specify an exact model configuration to use","example":"openai@gpt-4o@custom-name"}},"required":["prompt"]}}}},"responses":{"201":{"description":"Returns generated AI text.","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"string"}},"required":["result"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/api/%7BbaseId%7D/ai/generate';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"prompt\":\"string\",\"task\":\"coding\",\"modelKey\":\"openai@gpt-4o@custom-name\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/api/%7BbaseId%7D/ai/generate',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({prompt: 'string', task: 'coding', modelKey: 'openai@gpt-4o@custom-name'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"prompt\\\":\\\"string\\\",\\\"task\\\":\\\"coding\\\",\\\"modelKey\\\":\\\"openai@gpt-4o@custom-name\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/api/%7BbaseId%7D/ai/generate\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/reward/claim":{"post":{"summary":"Claim a reward","description":"Submit a reward claim (e.g., social share)","tags":["reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"sourceType":{"type":"string","enum":["socialShare"]},"sourceMetaData":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin"]},"postUrl":{"type":"string"},"postId":{"type":"string"},"snapshotId":{"type":"string"},"content":{"type":"string"},"username":{"type":"string"},"followerCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"localization":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]}},"required":["message"]}}},"required":["isValid"]}},"required":["platform","postUrl"]}},"required":["sourceType","sourceMetaData"]},{"type":"object","properties":{"sourceType":{"type":"string","enum":["appSumoActivation"]},"sourceMetaData":{"nullable":true}},"required":["sourceType"]}]}}}},"responses":{"201":{"description":"Reward claim submitted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"rewardStatus":{"type":"string","enum":["pending","approved","rejected"]}},"required":["id","rewardStatus"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/claim \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sourceType\":\"socialShare\",\"sourceMetaData\":{\"platform\":\"x\",\"postUrl\":\"string\",\"postId\":\"string\",\"snapshotId\":\"string\",\"content\":\"string\",\"username\":\"string\",\"followerCount\":0,\"verifyResult\":{\"isValid\":true,\"errors\":[{\"message\":\"string\",\"localization\":{\"i18nKey\":\"string\",\"context\":{\"property1\":null,\"property2\":null}}}]}}}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/claim';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sourceType\":\"socialShare\",\"sourceMetaData\":{\"platform\":\"x\",\"postUrl\":\"string\",\"postId\":\"string\",\"snapshotId\":\"string\",\"content\":\"string\",\"username\":\"string\",\"followerCount\":0,\"verifyResult\":{\"isValid\":true,\"errors\":[{\"message\":\"string\",\"localization\":{\"i18nKey\":\"string\",\"context\":{\"property1\":null,\"property2\":null}}}]}}}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/reward/claim',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n sourceType: 'socialShare',\n sourceMetaData: {\n platform: 'x',\n postUrl: 'string',\n postId: 'string',\n snapshotId: 'string',\n content: 'string',\n username: 'string',\n followerCount: 0,\n verifyResult: {\n isValid: true,\n errors: [\n {\n message: 'string',\n localization: {i18nKey: 'string', context: {property1: null, property2: null}}\n }\n ]\n }\n }\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sourceType\\\":\\\"socialShare\\\",\\\"sourceMetaData\\\":{\\\"platform\\\":\\\"x\\\",\\\"postUrl\\\":\\\"string\\\",\\\"postId\\\":\\\"string\\\",\\\"snapshotId\\\":\\\"string\\\",\\\"content\\\":\\\"string\\\",\\\"username\\\":\\\"string\\\",\\\"followerCount\\\":0,\\\"verifyResult\\\":{\\\"isValid\\\":true,\\\"errors\\\":[{\\\"message\\\":\\\"string\\\",\\\"localization\\\":{\\\"i18nKey\\\":\\\"string\\\",\\\"context\\\":{\\\"property1\\\":null,\\\"property2\\\":null}}}]}}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/space/%7BspaceId%7D/reward/claim\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/reward/credit-list":{"get":{"summary":"Get reward credit list","description":"Get reward credit list for a space","tags":["reward","credit"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of reward credits","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sourceType":{"type":"string","enum":["appSumoActivation","socialShare","system"]},"rewardStatus":{"type":"string","enum":["pending","approved","rejected"]},"rewardType":{"type":"string","enum":["credit"]},"rewardAmount":{"type":"number"},"consumedAmount":{"type":"number"},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","sourceType","rewardStatus","rewardType","rewardAmount","consumedAmount","createdTime"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/credit-list \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/credit-list';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/reward/credit-list',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/reward/credit-list\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/space/{spaceId}/reward/{rewardId}":{"get":{"summary":"Get reward details","description":"Get details of a specific reward including its verification status","tags":["reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"rewardId","in":"path"}],"responses":{"200":{"description":"Reward details retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"spaceId":{"type":"string"},"userId":{"type":"string"},"sourceType":{"type":"string","enum":["appSumoActivation","socialShare","system"]},"sourceMetaData":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin"]},"postUrl":{"type":"string"},"postId":{"type":"string"},"snapshotId":{"type":"string"},"content":{"type":"string"},"username":{"type":"string"},"followerCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"localization":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]}},"required":["message"]}}},"required":["isValid"]}},"required":["platform","postUrl"]},"rewardStatus":{"type":"string","enum":["pending","approved","rejected"]},"rewardAmount":{"type":"number"},"consumedAmount":{"type":"number","nullable":true},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","spaceId","userId","sourceType","sourceMetaData","rewardStatus","rewardAmount","createdTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/space/%7BspaceId%7D/reward/%7BrewardId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/space/%7BspaceId%7D/reward/%7BrewardId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/space/%7BspaceId%7D/reward/%7BrewardId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/space/%7BspaceId%7D/reward/%7BrewardId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/overview":{"get":{"summary":"Get admin reward overview by spaces","description":"Get aggregated reward statistics grouped by space for admin management. Returns pending, approved, consumed, available and expiring amounts per space.","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Search by space name"},"required":false,"description":"Search by space name","name":"search","in":"query"},{"schema":{"type":"string","description":"Filter by created time from (ISO string)"},"required":false,"description":"Filter by created time from (ISO string)","name":"createdTimeFrom","in":"query"},{"schema":{"type":"string","description":"Filter by created time to (ISO string)"},"required":false,"description":"Filter by created time to (ISO string)","name":"createdTimeTo","in":"query"},{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Returns the reward overview grouped by spaces","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"}},"required":["id","name"]},"pendingCount":{"type":"integer"},"rejectedCount":{"type":"integer"},"approvedCount":{"type":"integer"},"approvedAmount":{"type":"integer"},"consumedAmount":{"type":"number"},"availableAmount":{"type":"number"},"expiringSoonAmount":{"type":"number"},"updatedTime":{"type":"string","nullable":true}},"required":["space","user","pendingCount","rejectedCount","approvedCount","approvedAmount","consumedAmount","availableAmount","expiringSoonAmount","updatedTime"]}},"total":{"type":"integer"}},"required":["items","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/overview?search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/list":{"get":{"summary":"Get admin reward list","description":"Get paginated and filtered list of reward for admin management. Supports filtering by space, status, platform, verification result, and search.","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Filter by space ID"},"required":false,"description":"Filter by space ID","name":"spaceId","in":"query"},{"schema":{"type":"string","enum":["appSumoActivation","socialShare","system"],"description":"Filter by reward source type"},"required":false,"description":"Filter by reward source type","name":"sourceType","in":"query"},{"schema":{"type":"string","enum":["pending","approved","rejected"],"description":"Filter by reward status"},"required":false,"description":"Filter by reward status","name":"status","in":"query"},{"schema":{"type":"string","enum":["x","linkedin"],"description":"Filter by social platform"},"required":false,"description":"Filter by social platform","name":"platform","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"Filter by verification result"},"required":false,"description":"Filter by verification result","name":"isValid","in":"query"},{"schema":{"type":"string","description":"Search by postUrl, uniqueKey or userId"},"required":false,"description":"Search by postUrl, uniqueKey or userId","name":"search","in":"query"},{"schema":{"type":"string","description":"Filter by created time from (ISO string)"},"required":false,"description":"Filter by created time from (ISO string)","name":"createdTimeFrom","in":"query"},{"schema":{"type":"string","description":"Filter by created time to (ISO string)"},"required":false,"description":"Filter by created time to (ISO string)","name":"createdTimeTo","in":"query"},{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Returns the paginated list of reward","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"}},"required":["id","name"]},"status":{"type":"string","enum":["pending","approved","rejected"]},"sourceType":{"type":"string","enum":["appSumoActivation","socialShare","system"]},"sourceMetaData":{"nullable":true},"amount":{"type":"integer"},"consumedAmount":{"type":"number","nullable":true},"remainingAmount":{"type":"number","nullable":true},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"}},"required":["id","space","user","status","sourceType","amount","consumedAmount","remainingAmount","rewardTime","expiredTime","createdTime"]}},"total":{"type":"integer"}},"required":["items","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/list?spaceId=SOME_STRING_VALUE&sourceType=SOME_STRING_VALUE&status=SOME_STRING_VALUE&platform=SOME_STRING_VALUE&isValid=SOME_STRING_VALUE&search=SOME_STRING_VALUE&createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&pageSize=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/spaces":{"get":{"summary":"Get all spaces with reward records","description":"Get a list of all spaces that have reward records for admin filtering","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Returns the list of spaces with reward records","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["items"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/reward/spaces \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/spaces';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/spaces',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/spaces\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/{rewardId}":{"get":{"summary":"Get admin reward detail","description":"Get detailed information of a specific reward including full metadata","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"rewardId","in":"path"}],"responses":{"200":{"description":"Returns the reward detail","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"spaceId":{"type":"string"},"spaceName":{"type":"string"},"sourceType":{"type":"string"},"sourceMetaData":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin"]},"postUrl":{"type":"string"},"postId":{"type":"string"},"snapshotId":{"type":"string"},"content":{"type":"string"},"username":{"type":"string"},"followerCount":{"type":"number"},"verifyResult":{"type":"object","properties":{"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"localization":{"type":"object","properties":{"i18nKey":{"type":"string"},"context":{"type":"object","additionalProperties":{"nullable":true}}},"required":["i18nKey"]}},"required":["message"]}}},"required":["isValid"]}},"required":["platform","postUrl"]},"uniqueKey":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected"]},"amount":{"type":"integer"},"consumedAmount":{"type":"number","nullable":true},"remainingAmount":{"type":"number","nullable":true},"rewardTime":{"type":"string","nullable":true},"expiredTime":{"type":"string","nullable":true},"createdTime":{"type":"string"},"lastModifiedTime":{"type":"string","nullable":true}},"required":["id","userId","spaceId","spaceName","sourceType","sourceMetaData","uniqueKey","status","amount","consumedAmount","remainingAmount","rewardTime","expiredTime","createdTime","lastModifiedTime"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/admin/reward/%7BrewardId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/%7BrewardId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/%7BrewardId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/%7BrewardId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/admin/reward/export/{spaceId}":{"get":{"summary":"Export admin reward list as CSV","description":"Export all reward records for a specific space as CSV file. Supports filtering by date range.","tags":["admin","reward"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Space ID to export rewards for"},"required":true,"description":"Space ID to export rewards for","name":"spaceId","in":"path"},{"schema":{"type":"string","description":"Filter by created time from (ISO string)"},"required":false,"description":"Filter by created time from (ISO string)","name":"createdTimeFrom","in":"query"},{"schema":{"type":"string","description":"Filter by created time to (ISO string)"},"required":false,"description":"Filter by created time to (ISO string)","name":"createdTimeTo","in":"query"}],"responses":{"200":{"description":"Returns the CSV file with reward records","content":{"text/csv":{"schema":{"type":"string"}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/admin/reward/export/%7BspaceId%7D?createdTimeFrom=SOME_STRING_VALUE&createdTimeTo=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}}}} \ No newline at end of file +{"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"},"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":"Keyset cursor for the next page when records are ordered by __auto_number ascending. Cannot be combined with skip > 0."},"required":false,"description":"Keyset cursor for the next page when records are ordered by __auto_number ascending. 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 bases in a space, so base-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 bases, in base-list order; omitted means the whole list"},"required":false,"description":"Resolve at most this many bases, in base-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 base 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 base-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 base\n\nRequired token scopes: `base|create`","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"}},"required":["spaceId"]}}}},"responses":{"201":{"description":"Returns information about a successfully created base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}":{"delete":{"description":"Delete a base by baseId\n\nRequired token scopes: `base|delete`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Deleted successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a base by baseId\n\nRequired token scopes: `base|read`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns information about a base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"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 base info\n\nRequired token scopes: `base|update`","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","nullable":true}}}}}},"responses":{"200":{"description":"Returns information about a successfully updated base.","content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string","nullable":true,"format":"emoji"}},"required":["spaceId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"icon\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"icon\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', icon: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"icon\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/table/{tableId}/view/{viewId}/order":{"put":{"description":"Update view order\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":"Update base order\n\nRequired token scopes: `base|update`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/personal-order":{"put":{"description":"Move a base 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"],"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 bases; the personal list goes back to last-visit recency.\n\nRequired token scopes: `base|read_all`","tags":["base"],"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 base list","description":"Get all bases that the current user has access to\n\nRequired token scopes: `base|read_all`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","enum":["space","personal"]},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"Returns the list of bases 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 a base collaborator\n\nRequired token scopes: `base|read`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"string","enum":["user","department"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"array","items":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]}},"required":false,"name":"role","in":"query"}],"responses":{"200":{"description":"Successful response, return base collaborator list.","content":{"application/json":{"schema":{"type":"object","properties":{"collaborators":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"userId":{"type":"string"},"userName":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"avatar":{"type":"string","nullable":true},"createdTime":{"type":"string"},"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":"Delete a base collaborators\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["base"],"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-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-excluded":true},"patch":{"description":"Update a base collaborator\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["base"],"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-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-excluded":true}},"/base/duplicate":{"post":{"description":"duplicate a base\n\nRequired token scopes: `base|create`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fromBaseId":{"type":"string","description":"The base to duplicate"},"spaceId":{"type":"string","description":"The space to duplicate the base to"},"withRecords":{"type":"boolean","description":"Whether to duplicate the records"},"name":{"type":"string","description":"The name of the duplicated base"},"baseId":{"type":"string"},"nodes":{"type":"array","items":{"type":"string"},"description":"The node IDs to include in the duplication"},"shareId":{"type":"string","description":"The share ID when duplicating from a shared base. If provided, will use share permissions instead of base|update permission."},"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 base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/duplicate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"fromBaseId\":\"string\",\"spaceId\":\"string\",\"withRecords\":true,\"name\":\"string\",\"baseId\":\"string\",\"nodes\":[\"string\"],\"shareId\":\"string\",\"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 base with SSE progress stream\n\nRequired token scopes: `base|create`","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fromBaseId":{"type":"string","description":"The base to duplicate"},"spaceId":{"type":"string","description":"The space to duplicate the base to"},"withRecords":{"type":"boolean","description":"Whether to duplicate the records"},"name":{"type":"string","description":"The name of the duplicated base"},"baseId":{"type":"string"},"nodes":{"type":"array","items":{"type":"string"},"description":"The node IDs to include in the duplication"},"shareId":{"type":"string","description":"The share ID when duplicating from a shared base. If provided, will use share permissions instead of base|update permission."},"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 base."}},"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 base were duplicated into the given target space.\n\nRequired token scopes: `base|read`","summary":"Check cross-space affected fields for base duplicate","tags":["base"],"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 base from template or apply a template to a base","description":"Create a base from template or apply a template to a base\n\nRequired token scopes: `base|create`","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The space id to create a base from"},"templateId":{"type":"string","description":"The template id to create a base from"},"withRecords":{"type":"boolean","description":"Whether to create records from the template"},"baseId":{"type":"string","description":"The base id to apply the template to"},"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 base.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"defaultUrl":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/create-from-template \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"templateId\":\"string\",\"withRecords\":true,\"baseId\":\"string\",\"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":"Get a base permission\n\nRequired token scopes: `base|read`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about a base permission.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/permission \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/permission';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/permission',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/permission\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/invitation/link":{"get":{"description":"List a invitation link to your\n\nRequired token scopes: `base|invite_link`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Successful response, return invitation information list.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"invitationId":{"type":"string"},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","inviteUrl","invitationCode","createdBy","createdTime","role"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/invitation/link\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a invitation link to your\n\nRequired token scopes: `base|invite_link`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"201":{"description":"Successful response, return the ID of the invitation link.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"inviteUrl":{"type":"string"},"invitationCode":{"type":"string"},"createdBy":{"type":"string"},"createdTime":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","inviteUrl","invitationCode","createdBy","createdTime","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/invitation/link\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/invitation/link/{invitationId}":{"delete":{"description":"Delete a invitation link to your\n\nRequired token scopes: `base|invite_link`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"}],"responses":{"200":{"description":"Successful response."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"patch":{"description":"Update a invitation link to your\n\nRequired token scopes: `base|invite_link`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"invitationId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["role"]}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"invitationId":{"type":"string"},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["invitationId","role"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/invitation/link/%7BinvitationId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/invitation/email":{"post":{"description":"Send invitations by e-mail\n\nRequired token scopes: `base|invite_email`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"},"minItems":1},"role":{"type":"string","enum":["creator","editor","commenter","viewer"]}},"required":["emails","role"]}}}},"responses":{"201":{"description":"Successful response, return invitation information.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"invitationId":{"type":"string"}},"required":["invitationId"]}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/invitation/email \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"emails\":[\"user@example.com\"],\"role\":\"creator\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/invitation/email';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"emails\":[\"user@example.com\"],\"role\":\"creator\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/invitation/email',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({emails: ['user@example.com'], role: 'creator'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"emails\\\":[\\\"user@example.com\\\"],\\\"role\\\":\\\"creator\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/invitation/email\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/shared-base":{"get":{"tags":["base"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Returns information about a shared base.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"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-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-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token."}},"/base/{baseId}/permanent":{"delete":{"description":"Permanently delete a base by baseId\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["base"],"security":[{"cookieAuth":[]}],"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-excluded":true}},"/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 base\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["base"],"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-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-excluded":true}},"/base/{baseId}/collaborators/users":{"get":{"summary":"Get base collaborator user list","description":"Get base collaborator user list\n\nRequired token scopes: `base|read`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"skip","in":"query"},{"schema":{"type":"number","nullable":true},"required":false,"name":"take","in":"query"},{"schema":{"type":"boolean","nullable":true},"required":false,"name":"includeSystem","in":"query"},{"schema":{"type":"string","enum":["desc","asc"]},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"Successful response, return base collaborator user list.","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string","nullable":true}},"required":["id","name","email"]}},"total":{"type":"number"}},"required":["users","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/collaborators/users?search=SOME_STRING_VALUE&skip=SOME_NUMBER_VALUE&take=SOME_NUMBER_VALUE&includeSystem=SOME_BOOLEAN_VALUE&orderBy=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/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 bases or spaces","content":{"application/json":{"schema":{"type":"object","properties":{"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"deletedTime":{"type":"string","nullable":true}},"required":["id","name","deletedTime"]}}},"required":["spaces"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/auth/user \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/user';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/auth/user',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/auth/user\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/base/{baseId}/dashboard":{"get":{"description":"Get a list of dashboards in base\n\nRequired token scopes: `base|read`","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboards.","content":{"application/json":{"schema":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"post":{"description":"Create a new dashboard\n\nRequired token scopes: `base|update`","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"201":{"description":"Returns data about the created dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}":{"get":{"description":"Get a dashboard by id\n\nRequired token scopes: `base|read`","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}},"pluginMap":{"type":"object","additionalProperties":{"type":"object","properties":{"id":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["id","pluginInstallId","name"]}}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a dashboard by id\n\nRequired token scopes: `base|update`","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Dashboard deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/rename":{"patch":{"description":"Rename a dashboard by id\n\nRequired token scopes: `base|update`","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Returns data about the renamed dashboard.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/rename\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/layout":{"patch":{"description":"Update a dashboard layout by id\n\nRequired token scopes: `base|update`","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["layout"]}}}},"responses":{"200":{"description":"Returns data about the updated dashboard layout.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"layout":{"type":"array","items":{"type":"object","properties":{"pluginInstallId":{"type":"string"},"x":{"type":"number"},"y":{"type":"number"},"w":{"type":"number"},"h":{"type":"number"}},"required":["pluginInstallId","x","y","w","h"]}}},"required":["id","layout"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"layout\":[{\"pluginInstallId\":\"string\",\"x\":0,\"y\":0,\"w\":0,\"h\":0}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({layout: [{pluginInstallId: 'string', x: 0, y: 0, w: 0, h: 0}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"layout\\\":[{\\\"pluginInstallId\\\":\\\"string\\\",\\\"x\\\":0,\\\"y\\\":0,\\\"w\\\":0,\\\"h\\\":0}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/layout\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{id}/plugin":{"post":{"description":"Install a plugin to a dashboard\n\nRequired token scopes: `base|update`","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"pluginId":{"type":"string"}},"required":["name","pluginId"]}}}},"responses":{"201":{"description":"Returns data about the installed plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"name":{"type":"string"}},"required":["id","pluginId","pluginInstallId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\",\"pluginId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\",\"pluginId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string', pluginId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\",\\\"pluginId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/dashboard/%7Bid%7D/plugin\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}":{"delete":{"description":"Remove a plugin from a dashboard\n\nRequired token scopes: `base|update`","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Plugin removed successfully."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"get":{"description":"Get a dashboard install plugin by id\n\nRequired token scopes: `base|read`","tags":["dashboard"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"dashboardId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"pluginInstallId","in":"path"}],"responses":{"200":{"description":"Returns data about the dashboard install plugin.","content":{"application/json":{"schema":{"type":"object","properties":{"pluginId":{"type":"string"},"pluginInstallId":{"type":"string"},"baseId":{"type":"string"},"name":{"type":"string"},"storage":{"type":"object","additionalProperties":{"nullable":true}}},"required":["pluginId","pluginInstallId","baseId","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/dashboard/%7BdashboardId%7D/plugin/%7BpluginInstallId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/dashboard/{dashboardId}/plugin/{pluginInstallId}/rename":{"patch":{"description":"Rename a plugin in a dashboard\n\nRequired token scopes: `base|update`","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":{"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"],"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-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\"))"}],"x-excluded":true},"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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true},"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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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 'Authorization: Bearer REPLACE_BEARER_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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\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 '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\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-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\"))"}],"x-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token."}},"/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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base by baseId\n\nRequired token scopes: `base|update`","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\"))"}]}},"/base/{baseId}/export-stream":{"get":{"description":"export a base by baseId with SSE progress stream\n\nRequired token scopes: `base|update`","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":"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 '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\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' \\\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\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' \\\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\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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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 \\\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":[],"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":{"post":{"description":"publish or unpublish a base\n\nRequired token scopes: `base|update`","summary":"publish or unpublish a base","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"cover":{"type":"object","nullable":true,"properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"name":{"type":"string"},"id":{"type":"string"},"thumbnailPath":{"type":"object","properties":{"lg":{"type":"string"},"sm":{"type":"string"}},"required":["lg","sm"]}},"required":["token","size","url","path","mimetype","name","id"]},"nodes":{"type":"array","items":{"type":"string"}},"includeData":{"type":"boolean"},"defaultActiveNodeId":{"type":"string","nullable":true}},"required":["title","description"]}}}},"responses":{"200":{"description":"publish base successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request 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 base\n\nRequired token scopes: `base|create`","summary":"import a base","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]},"spaceId":{"type":"string"}},"required":["notify","spaceId"]}}}},"responses":{"200":{"description":"import successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/import \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/import',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n notify: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n presignedUrl: 'string'\n },\n spaceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"},\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import-stream":{"post":{"description":"import a base with SSE progress stream\n\nRequired token scopes: `base|create`","summary":"import a base with SSE progress events","tags":["base"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"notify":{"type":"object","properties":{"token":{"type":"string","example":"xxxxxxxxxxx","description":"Token for the uploaded file"},"size":{"type":"number","example":1024,"description":"File size in bytes"},"url":{"type":"string","example":"/bucket/xxxxx","description":"URL of the uploaded file"},"path":{"type":"string","example":"/table/xxxxxx","description":"file path"},"mimetype":{"type":"string","example":"video/mp4","description":"MIME type of the uploaded file"},"width":{"type":"number","example":100,"description":"Image width of the uploaded file"},"height":{"type":"number","example":100,"description":"Image height of the uploaded file"},"presignedUrl":{"type":"string","description":"Preview url"}},"required":["token","size","url","path","mimetype","presignedUrl"]},"spaceId":{"type":"string"}},"required":["notify","spaceId"]}}}},"responses":{"200":{"description":"SSE stream with progress events and final result"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/import-stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-stream';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"notify\":{\"token\":\"xxxxxxxxxxx\",\"size\":1024,\"url\":\"/bucket/xxxxx\",\"path\":\"/table/xxxxxx\",\"mimetype\":\"video/mp4\",\"width\":100,\"height\":100,\"presignedUrl\":\"string\"},\"spaceId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/import-stream',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n notify: {\n token: 'xxxxxxxxxxx',\n size: 1024,\n url: '/bucket/xxxxx',\n path: '/table/xxxxxx',\n mimetype: 'video/mp4',\n width: 100,\n height: 100,\n presignedUrl: 'string'\n },\n spaceId: 'string'\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"notify\\\":{\\\"token\\\":\\\"xxxxxxxxxxx\\\",\\\"size\\\":1024,\\\"url\\\":\\\"/bucket/xxxxx\\\",\\\"path\\\":\\\"/table/xxxxxx\\\",\\\"mimetype\\\":\\\"video/mp4\\\",\\\"width\\\":100,\\\"height\\\":100,\\\"presignedUrl\\\":\\\"string\\\"},\\\"spaceId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/import-stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/import-airtable/analyze":{"post":{"description":"List accessible Airtable bases or summarize one base schema before import","summary":"analyze an Airtable import source","tags":["base"],"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"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"Target space for the new base. Required only when baseId is omitted; when importing into an existing base the base's own space is used and spaceId is ignored."},"baseId":{"type":"string","description":"Import into this existing base (add its tables) instead of creating a new one. When omitted, a new base 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 base (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"],"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"],"security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"Target space for the new base. Required only when baseId is omitted; when importing into an existing base the base's own space is used and spaceId is ignored."},"baseId":{"type":"string","description":"Import into this existing base (add its tables) instead of creating a new one. When omitted, a new base 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 base (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"],"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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/import-google-sheet/picker-config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/import-google-sheet/picker-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/base/import-google-sheet/picker-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/base/import-google-sheet/picker-config\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/base/{baseId}/move":{"put":{"description":"Move a base 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 base to another space","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string"}},"required":["spaceId"]}}}},"responses":{"200":{"description":"move 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 base 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 base move","tags":["base"],"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 base move job\n\nRequired token scopes: `space|update`","summary":"Get base data DB move job status","tags":["base"],"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 base move job (only before switch)\n\nRequired token scopes: `space|update`","summary":"Cancel base data DB move job","tags":["base"],"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 base move job\n\nRequired token scopes: `space|update`","summary":"Retry base data DB move job","tags":["base"],"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":"Get the erd of a base\n\nRequired token scopes: `base|update`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns the erd of a base.","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"},"crossBaseId":{"type":"string"},"crossBaseName":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"isLookup":{"type":"boolean","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":"Get base list by query\n\nRequired token scopes: `base|read`","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"spaceId","in":"path"}],"responses":{"200":{"description":"Returns the list of base.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"},"icon":{"type":"string","nullable":true},"role":{"type":"string","enum":["owner","creator","editor","commenter","viewer"]},"collaboratorType":{"type":"string","enum":["space","base"]},"restrictedAuthority":{"type":"boolean"},"enabledAuthority":{"type":"boolean"},"lastModifiedTime":{"type":"string","nullable":true},"createdTime":{"type":"string","nullable":true},"createdBy":{"type":"string"},"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-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\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/v1/ai-proxy/gateway-models \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/v1/ai-proxy/gateway-models';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/v1/ai-proxy/gateway-models\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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":{"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"},"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\":{\"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\",\"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\":{\"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\",\"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 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 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\\\":{\\\"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\\\",\\\"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":{"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"},"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":{"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"}},"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"},"enableCreditReward":{"type":"boolean"},"availableIntegrationProviders":{"type":"array","items":{"type":"string"}},"githubAppConfigured":{"type":"boolean"},"mobileAuthExchange":{"type":"boolean"},"scrapeEnabled":{"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/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":{"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"}}}}},"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":{"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"},"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 \\\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\"))"}]}},"/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":{"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"},"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":{"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"},"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\":{\"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\",\"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\":{\"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\",\"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 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 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\\\":{\\\"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\\\",\\\"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":{"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"},"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\":{\"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\",\"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\":{\"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\",\"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 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 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\\\":{\\\"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\\\",\\\"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 bases 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 bases\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-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\"))"}],"x-excluded":true}},"/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 base or table","tags":["trash"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"query"},{"schema":{"type":"string","enum":["base","table"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20},"required":false,"name":"pageSize","in":"query"},{"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":"Reset trash items for a base or table","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"resourceId","in":"query"},{"schema":{"type":"string","enum":["base","table"]},"required":true,"name":"resourceType","in":"query"},{"schema":{"type":"string","nullable":true},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20},"required":false,"name":"pageSize","in":"query"},{"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, base, 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":"Keyset cursor for the next page when records are ordered by __auto_number ascending. Cannot be combined with skip > 0."},"required":false,"description":"Keyset cursor for the next page when records are ordered by __auto_number ascending. 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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base 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 base."},"description":{"type":"string","nullable":true,"description":"The description of the table."},"icon":{"type":"string","nullable":true,"format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the field."},"name":{"type":"string","description":"The name of the field. can not be duplicated in the table.","example":"Tags"},"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"description":{"type":"string","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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table":{"get":{"summary":"List tables","description":"Retrieve a list of all tables in the specified base, including their basic information and configurations.\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 base."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]},"description":"The list of tables."}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/table\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/permanent":{"delete":{"summary":"Permanently delete table","description":"Permanently delete a table and all its data. This action cannot be undone.\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 base. 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 base.\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 base."}},"required":["dbTableName"]}}}},"responses":{"200":{"description":"Database table name successfully updated."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"dbTableName\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"dbTableName\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({dbTableName: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"dbTableName\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/table/%7BtableId%7D/db-table-name\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/table/{tableId}/default-view-id":{"get":{"summary":"Get default view id","description":"Get default view id\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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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"}},"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\"))"}],"description":"Required token scopes: `record|update`"}},"/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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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"}},"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\"))"}],"description":"Required token scopes: `record|delete`"}},"/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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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,\"appBuilderChatIntroDismissed\":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,\"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true},"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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/user/last-visit/list-base":{"get":{"tags":["user"],"security":[{"cookieAuth":[]}],"responses":{"200":{"description":"Returns data about user last visit base.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number"},"list":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","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-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-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token."}},"/user/last-visit/base-node":{"get":{"description":"Get user last visited base node\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["user"],"security":[{"cookieAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"parentResourceId","in":"query"}],"responses":{"200":{"description":"Returns data about user last visit base node.","content":{"application/json":{"schema":{"type":"object","properties":{"resourceType":{"type":"string","enum":["space","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-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-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user/track \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user/track\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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 '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\n\nSession (cookie) authentication only. Not callable with an access token.","tags":["auth"],"security":[{"cookieAuth":[]}],"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\"))"}],"x-excluded":true}},"/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 '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\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-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\"))"}],"x-excluded":true}},"/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 '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":[],"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\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-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\"))"}],"x-excluded":true}},"/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 '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\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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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 '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\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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/mobile/code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/auth/mobile/code\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/auth/mobile/web-session-code \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/auth/mobile/web-session-code';\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/mobile/web-session-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(\"POST\", \"/api/auth/mobile/web-session-code\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"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', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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/mobile/web-session?code=SOME_STRING_VALUE&redirect=SOME_STRING_VALUE\", 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\n\nRequired token scopes: `base|db_connection`","tags":["db-connection"],"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"],"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"],"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-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\"))"}],"x-excluded":true}},"/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 '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":[],"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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 \\\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":[],"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' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"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', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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?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":[],"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' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"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', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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?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":[],"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":"Keyset cursor for the next page when records are ordered by __auto_number ascending. Cannot be combined with skip > 0."},"required":false,"description":"Keyset cursor for the next page when records are ordered by __auto_number ascending. 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' \\\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&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/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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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&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\"))"}]}},"/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 '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":[],"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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false},{"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' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"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', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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?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\", 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":[],"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' \\\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';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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\", 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":[],"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":[],"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' \\\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":[],"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' \\\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":[],"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' \\\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":[],"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' \\\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&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&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&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":[],"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\"))"}]}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/short-link \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/short-link\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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 \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/short-link/%7Bcode%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/short-link/%7Bcode%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/short-link/%7Bcode%7D\", headers=headers)\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-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' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"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', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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&severity=SOME_STRING_VALUE¬ifyType=SOME_STRING_VALUE&cursor=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\":[\"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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\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\"))"}],"x-excluded":true},"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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true},"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-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\":[\"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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\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\"))"}],"x-excluded":true},"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-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\"))"}],"x-excluded":true}},"/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 base."},"description":{"type":"string","description":"The description of the table."},"icon":{"type":"string","format":"emoji","description":"The emoji icon string of the table."},"order":{"type":"number"},"lastModifiedTime":{"type":"string","description":"The last modified time of the table."},"defaultViewId":{"type":"string","description":"The default view id of the table."}},"required":["id","name","dbTableName"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/import/%7BbaseId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"worksheets\":{\"property1\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true},\"property2\":{\"name\":\"string\",\"columns\":[{\"type\":\"singleLineText\",\"name\":\"string\",\"sourceColumnIndex\":0}],\"useFirstRowAsHeader\":true,\"importData\":true}},\"attachmentUrl\":\"string\",\"fileType\":\"csv\",\"notification\":true,\"tz\":\"string\",\"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 bases 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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/pin/entry-map \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/entry-map';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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/entry-map\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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 base 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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/pin/list?type=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/pin/list?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/pin/list?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/pin/list?type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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 base\n\nRequired token scopes: `base|read`","tags":["usage"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"responses":{"200":{"description":"Returns usage information for the base.","content":{"application/json":{"schema":{"type":"object","properties":{"level":{"type":"string","enum":["free","pro","business","enterprise"]},"limit":{"type":"object","properties":{"maxRows":{"type":"number"},"maxSizeAttachments":{"type":"number"},"maxNumAutomationRuns":{"type":"number"},"maxNumDatabaseConnections":{"type":"number"},"maxRevisionHistoryDays":{"type":"number"},"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-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\"))"}],"x-excluded":true},"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-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\"))"}],"x-excluded":true},"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-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\"],\"allowDeviceFlow\":true}'"},{"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\"],\"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\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\"))"}],"x-excluded":true}},"/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-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\":[\"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: {\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\":[\"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\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\"))"}],"x-excluded":true},"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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token."}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/oauth/device/%7BuserCode%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/oauth/device/%7BuserCode%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/device/%7BuserCode%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/device/%7BuserCode%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/oauth/device/decision \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/oauth/device/decision\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token."}},"/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-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\"))"}],"x-excluded":true}},"/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"}},"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\"))"}],"description":"Required token scopes: `record|archive`"}},"/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"}},"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\"))"}],"description":"Required token scopes: `table|archive_read`, `table|export`"}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token."}},"/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-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\"))"}],"x-excluded":true,"description":"Session (cookie) authentication only. Not callable with an access token."}},"/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":{"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","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 base\n\nRequired token scopes: `base|update`","tags":["integrity"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"tableId","in":"query"}],"responses":{"200":{"description":"Returns integrity check results for the base","content":{"application/json":{"schema":{"type":"object","properties":{"hasIssues":{"type":"boolean"},"linkFieldIssues":{"type":"array","items":{"type":"object","properties":{"baseId":{"type":"string","description":"The base id of the link field with is cross-base"},"baseName":{"type":"string"},"tableId":{"type":"string"},"tableName":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ForeignTableNotFound","ForeignKeyNotFound","SelfKeyNotFound","SymmetricFieldNotFound","MissingRecordReference","InvalidLinkReference","ForeignKeyHostTableNotFound","ReferenceFieldNotFound","UniqueIndexNotFound","EmptyString","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 base\n\nRequired token scopes: `base|update`","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","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 base 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 base","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 base\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 base-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 base\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 base-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"]}}}}},"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\"))"}],"description":"Required token scopes: `table|read`"},"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."}},"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\"))"}],"description":"Required token scopes: `table|update`"}},"/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"]}}}}},"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\"))"}],"description":"Required token scopes: `table|update`"}},"/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\"))"}],"description":"Required token scopes: `table|read`"}},"/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\"))"}],"description":"Required token scopes: `table|read`"}},"/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 \\\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":[],"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\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":"Get nodes for a base\n\nRequired token scopes: `base|read`","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},"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 for a base\n\nRequired token scopes: `base|read`","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","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 for a base\n\nRequired token scopes: `base|read`","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Deleted node Successfully","content":{"application/json":{"schema":{"type":"object","properties":{"resourceId":{"type":"string"},"resourceType":{"type":"string"},"permanent":{"type":"boolean"}},"required":["resourceId","resourceType"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/tree":{"get":{"description":"Get tree nodes for a base\n\nRequired token scopes: `base|read`","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},"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":"Get list nodes of a base\n\nRequired token scopes: `base|read`","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},"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\n\nRequired token scopes: `base|update`","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},"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 node in base\n\nRequired token scopes: `base|update`","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Created folder node","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/folder',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/node/folder\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node":{"post":{"description":"Create a hierarchical node for a base\n\nRequired token scopes: `base|read`","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"resourceType":{"type":"string","enum":["folder"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1}},"required":["resourceType","name"]},{"type":"object","properties":{"resourceType":{"type":"string","enum":["table"]},"parentId":{"type":"string","nullable":true},"name":{"type":"string","minLength":1},"dbTableName":{"type":"string","pattern":"^[a-z]\\w{0,62}$/i","description":"Table name in backend database. Limitation: 1-63 characters, start with letter, can only contain letters, numbers and underscore, case insensitive, cannot be duplicated with existing db table name in the base."},"description":{"type":"string","nullable":true,"description":"The description of the table."},"icon":{"type":"string","nullable":true,"format":"emoji","description":"The emoji icon string of the table."},"fields":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["singleLineText","longText","user","attachment","checkbox","multipleSelect","singleSelect","date","number","rating","formula","rollup","conditionalRollup","link","createdTime","lastModifiedTime","createdBy","lastModifiedBy","autoNumber","button"],"description":"The field types supported by teable.","example":"singleSelect"},"name":{"type":"string","minLength":1},"unique":{"type":"boolean","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 base id of the table that this field is linked to, only required for cross base link"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"filter":{"type":"object","description":"Filter to apply when resolving conditional lookup values."},"sort":{"type":"object","properties":{"fieldId":{"type":"string","description":"The field in the foreign table used to order lookup records."},"order":{"type":"string","enum":["asc","desc"],"description":"Ordering direction to apply to the sorted field."}},"required":["fieldId","order"],"description":"Optional sort configuration applied before aggregating lookup values."},"limit":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":5000,"description":"Maximum number of matching records to include in the lookup result."}},"required":["foreignTableId","lookupFieldId","filter"],"additionalProperties":false}],"description":"The lookup options for field, you need to configure it when isLookup attribute is true or field type is rollup."},"options":{"anyOf":[{"type":"object","properties":{"expression":{"type":"string","enum":["countall({values})","counta({values})","count({values})","sum({values})","average({values})","max({values})","min({values})","and({values})","or({values})","xor({values})","array_join({values})","array_unique({values})","array_compact({values})","concatenate({values})"]},"timeZone":{"type":"string","description":"The time zone that should be used to format dates"},"formatting":{"description":"Different cell value types are determined based on the results of expression parsing"},"showAs":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["url","email","phone"],"description":"can display as 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"lookupFieldId":{"type":"string","description":"the field in the foreign table that will be displayed as the current field"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"fkHostTableName":{"type":"string","description":"the table name for storing keys, in many-to-many relationships, keys are stored in a separate intermediate table; in other relationships, keys are stored on one side as needed"},"selfKeyName":{"type":"string","description":"the name of the field that stores the current table primary key"},"foreignKeyName":{"type":"string","description":"The name of the field that stores the foreign table primary key"},"symmetricFieldId":{"type":"string","description":"the symmetric field in the foreign table, empty if the field is a one-way link"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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 base id of the table that this field is linked to, only required for cross base link"},"relationship":{"type":"string","enum":["oneOne","manyMany","oneMany","manyOne"],"description":"describe the relationship from this table to the foreign table"},"foreignTableId":{"type":"string","description":"the table this field is linked to"},"isOneWay":{"type":"boolean","description":"whether the field is a one-way link, when true, it will not generate a symmetric field, it is generally has better performance"},"filterByViewId":{"type":"string","nullable":true,"description":"the view id that limits the number of records in the link field"},"visibleFieldIds":{"type":"array","nullable":true,"items":{"type":"string"},"description":"the fields that will be displayed in the link field, 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":"Duplicate a node for a base\n\nRequired token scopes: `base|read`","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},"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":"Permanent delete a node for a base\n\nRequired token scopes: `base|read`","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Permanent deleted node Successfully"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/%7BnodeId%7D/permanent\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/node/folder/{folderId}":{"patch":{"description":"Rename a node folder\n\nRequired token scopes: `base|update`","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"folderId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1}},"required":["name"]}}}},"responses":{"200":{"description":"Updated node folder","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D';\nconst options = {\n method: 'PATCH',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"name\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PATCH',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({name: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"name\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]},"delete":{"description":"Delete a node folder and move its children to parent\n\nRequired token scopes: `base|update`","tags":["base node"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"folderId","in":"path"}],"responses":{"200":{"description":"Deleted folder node (for client side cleanup)"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/node/folder/%7BfolderId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share":{"post":{"description":"Create a base share link\n\nRequired token scopes: `base|update`","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"}}}}}},"responses":{"201":{"description":"Returns the created base share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string","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":"Get all shared node IDs for a base\n\nRequired token scopes: `base|read`","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","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 a base share link\n\nRequired token scopes: `base|update`","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},"allowEdit":{"type":"boolean","nullable":true},"enabled":{"type":"boolean"},"password":{"type":"string","nullable":true,"minLength":3}}}}}},"responses":{"200":{"description":"Returns the updated base share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string","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 base share link\n\nRequired token scopes: `base|update`","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Successfully deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/share/%7BshareId%7D';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/share/%7BshareId%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/share/%7BshareId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share/{shareId}/refresh":{"post":{"description":"Refresh/regenerate a base share link ID\n\nRequired token scopes: `base|update`","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the refreshed base share","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string","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":"Get shared base information","tags":["base-share"],"security":[],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"responses":{"200":{"description":"Returns the shared base information","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareMeta":{"type":"object","properties":{"password":{"type":"boolean"},"nodeId":{"type":"string","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 \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/base',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/share/%7BshareId%7D/base\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/share/node/{nodeId}":{"get":{"description":"Get a base share by node ID\n\nRequired token scopes: `base|read`","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"nodeId","in":"path"}],"responses":{"200":{"description":"Returns the base share for the specified node","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"},"shareId":{"type":"string"},"password":{"type":"boolean"},"nodeId":{"type":"string","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 password to access shared base","tags":["base-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/base/auth \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"password\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base/auth';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"password\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/base/auth',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({password: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"password\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/base/auth\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/share/{shareId}/base/copy":{"post":{"description":"Copy a shared base to a target space\n\nRequired token scopes: `base|create`","tags":["base-share"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"shareId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"spaceId":{"type":"string","description":"The target space ID to copy the base to"},"name":{"type":"string","description":"The name of the copied base"},"withRecords":{"type":"boolean","default":true,"description":"Whether to copy records"},"baseId":{"type":"string","description":"The target base ID to copy into. If provided, tables will be added to the existing base instead of creating a new one."}},"required":["spaceId"]}}}},"responses":{"200":{"description":"Returns the copied base","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"spaceId":{"type":"string"}},"required":["id","name","spaceId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/base/copy \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"spaceId\":\"string\",\"name\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/base/copy';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"spaceId\":\"string\",\"name\":\"string\",\"withRecords\":true,\"baseId\":\"string\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/share/%7BshareId%7D/base/copy',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({spaceId: 'string', name: 'string', withRecords: true, baseId: 'string'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"spaceId\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"withRecords\\\":true,\\\"baseId\\\":\\\"string\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/share/%7BshareId%7D/base/copy\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/user-integrations":{"get":{"description":"Get user integration list\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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the base id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","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"],"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"],"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"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"responses":{"200":{"description":"The active snapshot of the workflow","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"a unique identifier for the workflow"},"baseId":{"type":"string","description":"the base id of the workflow"},"name":{"type":"string","description":"the name of the workflow"},"description":{"type":"string","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 base\n\nRequired token scopes: `automation|read`","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","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"],"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 base 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"],"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"],"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"],"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"],"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"],"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"],"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"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"workflowId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"anchorId":{"type":"string"},"position":{"type":"string","enum":["before","after"]}},"required":["anchorId","position"]}}}},"responses":{"200":{"description":"Successfully update."}},"x-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"anchorId\":\"string\",\"position\":\"before\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order';\nconst options = {\n method: 'PUT',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"anchorId\":\"string\",\"position\":\"before\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'PUT',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({anchorId: 'string', position: 'before'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"anchorId\\\":\\\"string\\\",\\\"position\\\":\\\"before\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/base/%7BbaseId%7D/workflow/%7BworkflowId%7D/order\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/workflow/{tableId}/filter-link-records":{"post":{"description":"get automation workflow list in base\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":"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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 \\\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":[],"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\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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\",\"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: {\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\",\"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\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\"))"}],"x-excluded":true}},"/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 \\\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\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-base 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-base 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 bases 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 bases 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 bases 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 bases 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 bases for the audit-log Base 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 bases 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 base 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 base / per seed table). Primary-storage claim paths hot-apply it within seconds without a restart; BYODB bases 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/base/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"]}}}}},"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\"))"}],"description":"Required token scopes: `instance|read`"}},"/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"]}}}}},"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\"))"}],"description":"Required token scopes: `instance|read`"}},"/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"}},"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\"))"}],"description":"Required token scopes: `instance|update`"}},"/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"}},"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\"))"}],"description":"Required token scopes: `instance|update`"}},"/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 base) 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 base/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"],"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"],"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"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Base ID"},"required":true,"description":"Base 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"],"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"],"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"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"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":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"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"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"responses":{"200":{"description":"Deployment status","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["idle","deploying","success","failed"],"description":"Deployment status"},"version":{"type":"number","description":"App version"},"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":"Base ID"},"required":true,"description":"Base ID","name":"baseId","in":"path"},{"schema":{"type":"string","description":"App ID"},"required":true,"description":"App ID","name":"appId","in":"path"}],"responses":{"201":{"description":"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 \\\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\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"]}}}}}},"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\"))"}],"description":"Required token scopes: `enterprise|update`"}},"/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"]}}}}},"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\"))"}],"description":"Required token scopes: `enterprise|read`"}},"/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\"))"}],"description":"Required token scopes: `enterprise|read`"}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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\"))"}],"description":"Required token scopes: `enterprise|read`"},"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\"))"}],"description":"Required token scopes: `enterprise|update`"}},"/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\"))"}],"description":"Required token scopes: `enterprise|update`"}},"/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\"))"}],"description":"Required token scopes: `enterprise|update`"}},"/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\"))"}],"description":"Required token scopes: `enterprise|update`"},"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\"))"}],"description":"Required token scopes: `enterprise|read`"}},"/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\"))"}],"description":"Required token scopes: `enterprise|update`"},"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\"))"}],"description":"Required token scopes: `enterprise|update`"},"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\"))"}],"description":"Required token scopes: `enterprise|read`"}},"/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\"))"}],"description":"Required token scopes: `enterprise|update`"}},"/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\"))"}],"description":"Required token scopes: `enterprise|update`"}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/experiment/onboarding-variant \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/experiment/onboarding-variant';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/experiment/onboarding-variant\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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 \\\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}/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"]}}}}}},"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\"))"}],"description":"Required token scopes: `routine|read`"}},"/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"]}}}}},"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\"))"}],"description":"Required token scopes: `routine|read`"},"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"}},"required":["id","routineId","snapshotId","chatId","status","errorMsg","plannedAt","startedAt","finishedAt","spent","createdTime"]}}}}},"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\"))"}],"description":"Required token scopes: `routine|update`"}},"/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 SQL query on a base\n\nRequired token scopes: `base|query_data`","summary":"Execute SQL query","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The base ID to execute query on"},"required":true,"description":"The base ID to execute query on","name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string","minLength":1,"description":"The SQL query to execute","example":"SELECT * FROM table_name LIMIT 10"}},"required":["sql"]}}}},"responses":{"200":{"description":"Query executed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","additionalProperties":{"nullable":true}},"description":"The query result rows"}},"required":["rows"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/sql-query \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"sql\":\"SELECT * FROM table_name LIMIT 10\"}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/sql-query';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"sql\":\"SELECT * FROM table_name LIMIT 10\"}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/sql-query',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({sql: 'SELECT * FROM table_name LIMIT 10'}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"sql\\\":\\\"SELECT * FROM table_name LIMIT 10\\\"}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/sql-query\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/sign-attachment-urls":{"post":{"description":"Generate signed URLs for attachment files\n\nRequired token scopes: `base|query_data`","summary":"Sign attachment URLs","tags":["base"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","description":"The base ID"},"required":true,"description":"The base ID","name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"The file path of the attachment"},"token":{"type":"string","description":"The access token for the attachment"},"mimetype":{"type":"string","description":"The MIME type of the attachment","example":"image/png"}},"required":["path","token"]},"description":"List of attachments to sign"}},"required":["attachments"]}}}},"responses":{"200":{"description":"URLs signed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","description":"The original attachment token"},"url":{"type":"string","description":"The signed URL for the attachment"}},"required":["token","url"]},"description":"List of signed attachments with their tokens and URLs"}},"required":["attachments"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/sign-attachment-urls \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachments\":[{\"path\":\"string\",\"token\":\"string\",\"mimetype\":\"image/png\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/sign-attachment-urls';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachments\":[{\"path\":\"string\",\"token\":\"string\",\"mimetype\":\"image/png\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/sign-attachment-urls',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({attachments: [{path: 'string', token: 'string', mimetype: 'image/png'}]}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"path\\\":\\\"string\\\",\\\"token\\\":\\\"string\\\",\\\"mimetype\\\":\\\"image/png\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/sign-attachment-urls\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/create":{"post":{"description":"Create chat\n\nRequired token scopes: `base|read`","tags":["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"],"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"],"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"],"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."},"required":false,"description":"Chat type, or a comma-separated list of types (e.g. `sandboxAgent,appGen`). Omit for general + sandbox-agent chats.","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"},"resourceId":{"type":"string"},"createdTime":{"type":"string"},"createdBy":{"type":"string"},"lastModifiedTime":{"type":"string"},"selectedModel":{"type":"string"},"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"}},"required":["id","name","createdTime","createdBy"]}},"total":{"type":"number"}},"required":["history","total"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'GET',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"GET\", \"/api/base/%7BbaseId%7D/chat/history?type=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/{chatId}/delete":{"delete":{"tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"chatId","in":"path"}],"responses":{"200":{"description":"Chat deleted"}},"x-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete';\nconst options = {method: 'DELETE', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'DELETE',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\nheaders = { 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\" }\n\nconn.request(\"DELETE\", \"/api/base/%7BbaseId%7D/chat/%7BchatId%7D/delete\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"description":"Required token scopes: `base|read`"}},"/base/{baseId}/chat/{chatId}/rename":{"patch":{"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":{"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\"))"}],"description":"Required token scopes: `base|read`"}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/chat/archived?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/chat/archived?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/chat/archived?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/chat/archived?limit=SOME_INTEGER_VALUE&offset=SOME_INTEGER_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/chat/archived/%7BchatId%7D/restore \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/archived/%7BchatId%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/chat/archived/%7BchatId%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/chat/archived/%7BchatId%7D/restore\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/chat/archived/%7BchatId%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/chat/archived/%7BchatId%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/chat/archived/%7BchatId%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/chat/archived/%7BchatId%7D\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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"],"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 \\\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":[],"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\n\nRequired token scopes: `base|read`","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"mimetype":{"type":"string"},"size":{"type":"number"},"path":{"type":"string"},"presignedUrl":{"type":"string"}},"required":["token","mimetype"]},"minItems":1,"description":"Attachments to extract text from"}},"required":["attachments"]}}}},"responses":{"200":{"description":"Extracted text content","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"extractedFiles":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"name":{"type":"string"},"content":{"type":"string"},"charCount":{"type":"number"},"truncated":{"type":"boolean"},"isPreview":{"type":"boolean"}},"required":["token","content","charCount","truncated"]}},"totalCharacters":{"type":"number"},"truncatedFiles":{"type":"number"},"message":{"type":"string"},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/text-extract \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"attachments\":[{\"token\":\"string\",\"name\":\"string\",\"mimetype\":\"string\",\"size\":0,\"path\":\"string\",\"presignedUrl\":\"string\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/text-extract';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"attachments\":[{\"token\":\"string\",\"name\":\"string\",\"mimetype\":\"string\",\"size\":0,\"path\":\"string\",\"presignedUrl\":\"string\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/text-extract',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n attachments: [\n {\n token: 'string',\n name: 'string',\n mimetype: 'string',\n size: 0,\n path: 'string',\n presignedUrl: 'string'\n }\n ]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"attachments\\\":[{\\\"token\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"mimetype\\\":\\\"string\\\",\\\"size\\\":0,\\\"path\\\":\\\"string\\\",\\\"presignedUrl\\\":\\\"string\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/text-extract\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/execute-script":{"post":{"description":"Execute TypeScript code in sandbox for chat tools\n\nRequired token scopes: `base|update`","tags":["chat"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"baseId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"TypeScript code to execute"},"input":{"type":"object","additionalProperties":{"nullable":true},"description":"Input parameters for the script"},"integrationIds":{"type":"array","items":{"type":"string"},"description":"Integration IDs to inject into script context"},"dependencies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"]},"description":"NPM dependencies to install"}},"required":["code"]}}}},"responses":{"200":{"description":"Script execution result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"result":{"type":"object","additionalProperties":{"nullable":true}},"logs":{"type":"object","properties":{"stdout":{"type":"string"},"stderr":{"type":"string"}},"required":["stdout","stderr"]},"executionTime":{"type":"number"},"error":{"type":"string"}},"required":["success"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/base/%7BbaseId%7D/chat/execute-script \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"code\":\"string\",\"input\":{\"property1\":null,\"property2\":null},\"integrationIds\":[\"string\"],\"dependencies\":[{\"name\":\"string\",\"version\":\"string\"}]}'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/base/%7BbaseId%7D/chat/execute-script';\nconst options = {\n method: 'POST',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: '{\"code\":\"string\",\"input\":{\"property1\":null,\"property2\":null},\"integrationIds\":[\"string\"],\"dependencies\":[{\"name\":\"string\",\"version\":\"string\"}]}'\n};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"Node.js","source":"const http = require('https');\n\nconst options = {\n method: 'POST',\n hostname: 'app.teable.ai',\n port: null,\n path: '/api/base/%7BbaseId%7D/chat/execute-script',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.write(JSON.stringify({\n code: 'string',\n input: {property1: null, property2: null},\n integrationIds: ['string'],\n dependencies: [{name: 'string', version: 'string'}]\n}));\nreq.end();"},{"lang":"Python","source":"import http.client\n\nconn = http.client.HTTPSConnection(\"app.teable.ai\")\n\npayload = \"{\\\"code\\\":\\\"string\\\",\\\"input\\\":{\\\"property1\\\":null,\\\"property2\\\":null},\\\"integrationIds\\\":[\\\"string\\\"],\\\"dependencies\\\":[{\\\"name\\\":\\\"string\\\",\\\"version\\\":\\\"string\\\"}]}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/base/%7BbaseId%7D/chat/execute-script\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}]}},"/base/{baseId}/chat/resolve-attachments":{"post":{"description":"Resolve attachment tokens to presigned URLs\n\nRequired token scopes: `base|read`","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\"))"}]}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/sandbox-agent/config \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox-agent/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/sandbox-agent/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/sandbox-agent/config\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/sandbox-agent/status \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox-agent/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/sandbox-agent/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/sandbox-agent/status\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/sandbox-agent/reset \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox-agent/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/sandbox-agent/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/sandbox-agent/reset\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/chat/realtime-transcription/audio \\\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/chat/realtime-transcription/audio';\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/chat/realtime-transcription/audio',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(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/chat/realtime-transcription/audio\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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 bases 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":"Bases 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 base (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 bases 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 base\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 base","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 \\\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\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-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,\"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: {\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,\"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\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\"))"}],"x-excluded":true}},"/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-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\"))"}],"x-excluded":true}},"/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, app, cuppyclaw bot, routine, space or system"},"required":true,"description":"Listing context: user, base, 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":"Base ID (required for user scope) — folds in base and space scoped skills"},"required":false,"description":"Base ID (required for user scope) — folds in base 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, app, cuppyclaw bot, routine, space or system"},"required":true,"description":"Listing context: user, base, 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":"Base ID — includes base- and space-scoped skills when provided"},"required":false,"description":"Base ID — includes base- 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, 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, 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, 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, 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, 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":"Base context: authorizes a folded space skill via base|read on that base."},"required":false,"description":"Base context: authorizes a folded space skill via base|read on that base.","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 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 base context: authorizes reading a folded space skill via base|read on that base."}},"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, 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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/announcement?lang=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/announcement?lang=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/announcement?lang=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/announcement?lang=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"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', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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/%7Bversion%7D/render?token=SOME_STRING_VALUE\", headers=headers)\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-codeSamples":[{"lang":"Shell","source":"curl --request PUT \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PUT\", \"/api/artifact/%7BartifactId%7D/share\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true},"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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%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/artifact/%7BartifactId%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/artifact/%7BartifactId%7D/share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true},"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-codeSamples":[{"lang":"Shell","source":"curl --request DELETE \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/share \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/share';\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/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(\"DELETE\", \"/api/artifact/%7BartifactId%7D/share\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/artifact/%7BartifactId%7D/share/rotate \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/artifact/%7BartifactId%7D/share/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/artifact/%7BartifactId%7D/share/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/artifact/%7BartifactId%7D/share/rotate\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/artifact \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/share/%7BshareId%7D/artifact';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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/artifact\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/artifact/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/artifact/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/artifact/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/artifact/auth\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/share/%7BshareId%7D/artifact/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/share/%7BshareId%7D/artifact/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/share/%7BshareId%7D/artifact/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/share/%7BshareId%7D/artifact/render-token\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-onboarding/analyze \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user-onboarding/analyze\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-onboarding/analyze/stream \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/user-onboarding/analyze/stream\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url https://app.teable.ai/api/user-onboarding/state \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-onboarding/state';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n console.log(data);\n} catch (error) {\n console.error(error);\n}"},{"lang":"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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"lang":"Python","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-onboarding/state\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/user-onboarding/start":{"post":{"description":"Idempotently create the onboarding base 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 base the onboarding flow operates on","content":{"application/json":{"schema":{"type":"object","properties":{"baseId":{"type":"string"}},"required":["baseId"]}}}}},"x-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/user-onboarding/start \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/user-onboarding/start';\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-onboarding/start',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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-onboarding/start\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user-onboarding/profile \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user-onboarding/profile\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request PATCH \\\n --url https://app.teable.ai/api/user-onboarding/progress \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"PATCH\", \"/api/user-onboarding/progress\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}},"/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-codeSamples":[{"lang":"Shell","source":"curl --request GET \\\n --url 'https://app.teable.ai/api/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"lang":"JavaScript","source":"const url = 'https://app.teable.ai/api/sandbox/tool?scopeType=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/sandbox/tool?scopeType=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/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true},"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-codeSamples":[{"lang":"Shell","source":"curl --request POST \\\n --url https://app.teable.ai/api/sandbox/tool \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\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: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\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 Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\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 = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n}\n\nconn.request(\"POST\", \"/api/sandbox/tool\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true},"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-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' \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"},{"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', headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}};\n\ntry {\n const response = await fetch(url, options);\n const data = await response.json();\n 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 Authorization: 'Bearer REPLACE_BEARER_TOKEN'\n }\n};\n\nconst req = http.request(options, function (res) {\n const chunks = [];\n\n res.on('data', function (chunk) {\n chunks.push(chunk);\n });\n\n res.on('end', function () {\n const body = Buffer.concat(chunks);\n console.log(body.toString());\n });\n});\n\nreq.end();"},{"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/sandbox/tool?scopeType=SOME_STRING_VALUE&scopeId=SOME_STRING_VALUE&name=SOME_STRING_VALUE\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"}],"x-excluded":true}}}} \ No newline at end of file